Java Collatz

박상우·2022년 8월 11일
post-thumbnail

콜라츠 추측

콜라츠 추측이란?

  • 모든 자연수(n)는 다음의 단계를 거치면 반드시 1이 된다는 추측
  1. n이 짝수라면 2로나눈다.
  2. n이 홀수라면 3으로 곱한 뒤 1을 더한다.
  3. n이 1이 될때까지 위 과정을 반복한다.
    이때 숫자 7이 콜라츠 추측에 부합하며 거친 단계수는 16이다.(16번만에 7이 1이 되었다는 뜻)

문제

  • 넘겨 받은 자연수 num에 대해 이 수가 콜라츠 추측의 조건에 따라 몇 번만에 1이 되는가의 값을 반환하는 메서드 computeCount를 완성하십시오.
  • 단, num은 1이상의 자연수 이고 num이 1이라면 0을 반환하여야 한다.
  • 단, num은 1이상의 자연수이다.
  • 숫자 1부터 1000까지의 콜라츠 추측 단계수를 출력하세요.

  • 직면한 문제 1.
    어떤 반복문을 사용하느냐에 따라서 결과가 달라진다.
  • 직면한 문제 2.
    반복됨에 따라서 그 반복 횟수를 출력해야 한다.
  • 직면한 문제 3.
    반복문을 사용하지 않고도 이 문제를 해결할 수 있을까에 대한 의문

풀이법

  1. 우선 반복문이 조건에 부합하다면 계속해서 반복을 해야하기 때문에 While문을 사용하였다.
  2. num의 조건에서 1이 아닐경우 계속해서 반복이 되어지다가 1이되면 그 반복문을 탈출해야 한다.
  3. if조건문에서 매개변수인 num값이 2로 나누었을때 0이 되지 않는다면 홀수 이므로 num * 3 + 1의 값을 다시 num에 대입한다.
  4. else if 조건문에서는 num을 2로 나누었을때 0이 되면 num에 num/2한 값을 다시 대입해준다.
    이러한 구문이 반복될때 마다 count변수는 0에서 부터 ++로 인해 1씩 증감하고 그 count값을 return해줌으로써 computeCount 메서드 호출시 num값에 맞는 count의 값이 출력된다.
  • 예외 : 조건 문을 쓰지 않고 풀이하기

    재귀 호출(Recursive Call) :
    어떠한 메서드가 스스로를 다시 호출하는 것. 반드시 어떠한 경우에 재귀호출이 풀려야 한다. (그렇지 않으면 조건을 충족을 계속 하기 때문에 무한 반복하게 된다.)

결과

느낀점
while문을 이용하여 문제를 풀어봄으로써 다양한 경험을 할 수 있었고 특히 반복문이 구동되면서의 수를 세는 문제를 통해 다른 방식의 문제에서도 비슷하게 풀 수 있을것 같다는 점을 느꼈습니다.

profile
백엔드 개발자가 되기 위한 여정

0개의 댓글