알고리즘 풀이 - 콜라츠 추측
콜라츠 추측
최초의 풀이
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
}
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 변수를 준비한다.
- result가 500이 될때까지 반복한다.
- 짝수면 num / 2, 홀수면 num * 3 + 1
- result가 500이 넘으면 -1을 return한다.
- num === 1이 되면 result를 return한다.
주의 사항
- 500회에서 return 할지 501회에서 return할지
- 처음부터 1이 들어오는 경우에 주의한다.
- 빈틈을 찌르는 parameter에 주의하자.
다듬을 수 있는 사항
- if else 부분에 삼항연산자를 사용하면 조금 더 깔끔해질 여지가 있다.
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
}
배운 점
- while을 더 잘 활용하면 소스가 깔끔하다.
- 필요한 부분에 삼항연산자를 사용하자.
- if-else, 삼항연산자 중 가독성이 좋은 방향으로 선택.
Author And Source
이 문제에 관하여(알고리즘 풀이 - 콜라츠 추측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cckn/알고리즘-풀이-콜라츠-추측저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)