Algorithm
JavaScript 프로그래머스 Lv.0 뿌셔뿌셔 - 1
hooti
2024. 2. 22. 03:12
프로그래머스 코딩테스트 Lv.0 뿌셔뿌셔
사유 : 퇴사 후 두달정도 쉬었더니 뇌가 굳음 🤯
다시 말랑팔딱해지기 위해 알고리즘 뿌셔뿌셔 도전 기록!
1번 / 문자열 겹쳐쓰기 (JS)
문제 설명
문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
function solution(m_str, o_str, s) {
return m_str.slice(0, s).concat(o_str).concat(m_str.slice(o_str.length + s))
}
2번 / 문자열섞기 (JS)
문제 설명
길이가 같은 두 문자열 str1과 str2가 주어집니다.두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.
function solution(str1, str2) {
let answer = ''
for (i=0; i<str1.length; i++) {
answer += str1[i] + str2[i]
}
return answer
}
문제설명을 제대로 이해하지 못했어서 2중 for문을 돌려야하나, 아니면 배열화해서 하나씩 꺼내란건가 하고 고민을 했었다. 물마시고 다시 읽어보니깐 그렇게 복잡하게 생각할 문제가 아니란걸 깨달음 😓 뭐든지 생각은 적당히 해야한다
3번 / 문자 리스트를 문자열로 변환하기 (JS)
문제 설명
문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.
function solution(arr) {
return arr.join('')
}
4번 / 문자열 곱하기 (JS)
문제 설명
문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.
function solution(str, k) {
let answer = ''
for (let i=0; i < k; i++) {
answer += str
}
return answer
}
처음에 concat으로 이었다가 다른답 보고 아차! 했던 문제다. 앞에서 concat을 썼다고 꼭 필수로 써야된다 착각했다.
5번 / 더 크게 합치기 (JS)
문제 설명
연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.12 ⊕ 3 = 1233 ⊕ 12 = 312양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.
function solution(a, b) {
let tmep_a = Number(a.toString() + b.toString())
let tmep_b = Number(b.toString() + a.toString())
return tmep_a > tmep_b ? tmep_a : tmep_b
}
따로 변수를 선언하지 말고, 그냥 리턴해버릴까 고민했었는데 그렇게 되면 나중에 봤을때 바로 이해하지 못할 것 같아 나름대로 보기 편하게 정리하려 했다.
6번 / 두 수의 연산값 비교하기 (JS)
연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.
12 ⊕ 3 = 1233 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 * a * b 중 더 큰 값을 return하는 solution 함수를 완성해 주세요.
단, a ⊕ b와 2 * a * b가 같으면 a ⊕ b를 return 합니다.
function solution(a, b) {
let tmep_a = Number(a.toString() + b.toString())
let tmep_b = 2 * Number(a.toString()) * Number(b.toString())
return tmep_a === tmep_b ? tmep_a : tmep_b
}
7번 / n의 배수 (JS)
문제 설명
정수 num과 n이 매개 변수로 주어질 때, num이 n의 배수이면 1을 return n의 배수가 아니라면 0을 return하도록 solution 함수를 완성해주세요.
function solution(num, n) {
return num%n === 0 ? 1 : 0
}
8번 / 공배수 (JS)
문제 설명
정수 number와 n, m이 주어집니다. number가 n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.
function solution(number, n, m) {
return number%n === 0 && number%m === 0 ? 1 : 0
}
9번 / 홀짝에 따라 다른 값 반환하기 (JS)
문제 설명
양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.
function solution(n) {
let even = 0
let odd = 0
for (let i=1; i<=n; i++) {
if (i%2 !== 0) {
odd += i
} else {
even += i*i
}
}
return n%2 === 0 ? even : odd
}
죽어도 동일한 for문를 두번 쓰긴 싫어서 조건 위로 뻈다. if문 말고 삼항으로 할까했는데, 각 다른 변수에 저장되는 내용이니 if문이 더 보기 좋을 것 같았다. 사실 이렇게 되면 n의 값에 따라 두개의 변수는 하나는 쓸모가 없어지기 때문에 괜한 작업을 한번 더 하는 코드로 보인다. 내일 한번 더 보기 좋게 줄이는 작업을 해야겠다.
10번 / 조건 문자열 (JS)
문제 설명
문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.두 수가 n과 m이라면
">", "=" : n >= m
"<", "=" : n <= m
">", "!" : n > m
"<", "!" : n < m
두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다. 그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.
function solution(ineq, eq, n, m) {
let answer = 0;
switch (ineq) {
case '<':
answer = eq === '=' ? n <= m : n < m
break
case '>':
answer = eq === '=' ? n >= m : n > m
break
}
return answer ? 1 : 0
}
문제만 봐도 느껴지지만, 가독성 좋지 않은 조건들이다. 삼항으로만 쓰면 가로로 길어져서 한눈에 들어오기 어려울 것 같았다. 조건문은 당연히 탈락! 가독성이 구려진다. 고민하다가 고른게 스위치문 🤔 팀에 있던 분이 스위치문을 좋아하셔서 그쪽으로 피드백을 받다보니 나도 여기에 익숙해졌나보다. 이게 훨씬 예뻐보여
내일은 15개 이상 푸는것을 목표로 힘내자 아자아자