알고리즘 풀이 - 콜라츠 추측

picture 22

콜라츠 추측

최초의 풀이

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
}

풀이 과정

  1. result 변수를 준비한다.
  2. result가 500이 될때까지 반복한다.

    1. 짝수면 num / 2, 홀수면 num * 3 + 1
    2. result가 500이 넘으면 -1을 return한다.
    3. 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, 삼항연산자 중 가독성이 좋은 방향으로 선택.

Written by@박대성

독서와 지식관리에 관심이 많은 개발자

GitHub