반응형
[처음 푼 풀이]
function solution(num) {
let result = 0;
for (let i = 1; i <= 500; i++) {
if (num % 2 === 0) {
num % 2;
} else {
num * 3 + 1;
}
result += i;
}
return result;
}
문제에 나온 순서대로 짝수, 홀수 일 때 나누어 썼는데 생각해보니 1이 될 때까지 작업하는 것이므로 그 결과값을 나오게 해야했다.
그래서 for문 안의 if문 조건을 짝/홀이 아니라 1일 때와 1이 아닐 때로 조건을 걸어서 풀면 된다.
[두번째 풀이]
function solution(num) {
let result = 0;
for (let i = 0; i <= 500; i++) {
if (num !== 1) {
num = num % 2 === 0 ? num / 2 : num * 3 + 1;
} else {
return (result = i);
}
}
return (result = -1);
}
1. 먼저 결과값을 담을 result 변수를 생성해준다.
2. for 문을 돌리고 i 가 500번까지는 반복되어야 하므로 i <= 500으로 조건을 설정해준다.
3. if 문 안의 조건을 먼저 1이 아닐 때 설정한 후,
4. 삼항연산자를 이용해 num이 짝수일 때는 2로 나누어지고, 홀수일 땐 3을 곱하고 1을 더해주도록 조건을 설정한다.
5. 이때 num의 값을 반환 받아줘야 한다. (왜냐하면 1이 아닐 때의 조건이 설정되어 있으므로 1이 되면 빠져나가야 한다.)
6. else 문에는 1일 때 결과값을 반환받는 것. result = i 를 통해 for문의 반복 횟수를 알 수 있다.
7. 마지막으로 500번까지 반복해도 1이 되지 않는다면 return (result = -1) 해준다.
[코드 리뷰]
function solution(num) {
for (let i = 0; i <= 500; i++) {
if (num === 1) return i;
num = num % 2 === 0 ? num / 2 : num * 3 + 1;
}
return -1;
}
return 해줘야 하는 조건문을 가장 위로 빼고 불필요한 변수를 제거했다.
이렇게하면 result에 값을 굳이 안넣어줘도 되니까 훨씬 코드가 깔끔해진다.
그리고 애초에 num === 1 일 때로 설정 한 후 삼항연산자를 써도 문제가 풀린다!
어처피 num이 1이 될 때까지 반복하기 때문에 굳이 1이 아닐때로 설정해서 코드를 길게 쓸 필요가 없었다..
또 result 변수가 없어져서 바로 return -1 이 가능해 훨씬 보기 좋아보인다.
[추가 코드]
function solution(num) {
let result = 0;
while (num > 1) {
if (result > 500) return -1;
num = num % 2 === 0 ? num / 2 : num * 3 + 1;
result++;
}
return result;
}
while 문을 통해서도 똑같이 풀이가 가능하다.
num 이 1 보다 클 때, result 값이 500 이하라면 삼항연산자를 써주고 result 값을 1씩 증가시킨다! (반복 횟수)
result 값이 500보다 크면 -1 리턴.
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 제일 작은수 제거하기 (0) | 2022.09.22 |
---|---|
[JS] 핸드폰 번호 가리기 (1) | 2022.09.22 |
[JS] 예산 (0) | 2022.09.21 |
[JS] 나누어 떨어지는 숫자 배열 (1) | 2022.09.21 |
[JS] 두 정수 사이의 합 (0) | 2022.09.21 |