January 09, 2021
function solution(num) {
let result = 0
while (result <= 500) {
result++
if (num % 2 === 0) num /= 2
else num = num * 3 + 1
if (num === 1) return result
}
return -1
}
최초의 풀이 - 13번에서 계속해서 실패가 이뤄짐…
게시판을 살펴보니 13번 케이스는 input이 1이라고 한다.
input이 1이면 바로 0을 return 해야 하는데 내 소스는 그렇지 못함..
해당 내용에 맞게 수정하자
function solution(num) {
let result = 0
while (result <= 500) {
if (num === 1) return result
result++
if (num % 2 === 0) num /= 2
else num = num * 3 + 1
}
return -1
}
result가 500이 될때까지 반복한다.
처음부터 1이 들어오는 경우에 주의한다.
num === 1
을 검사하는 부분 대신 1이 되면 반복문에서 탈출하도록 하자. (타 소스코드 참조 )function solution(num) {
let count = 0
while (num !== 1 && count++ <= 500) {
num = num % 2 ? num * 3 + 1 : (num /= 2)
}
return num === 1 ? count : -1
}
필요한 부분에 삼항연산자를 사용하자.