[프로그래머스/Java]Level1 - 콜라츠 추측

2020. 11. 1. 22:48프로그래머스/Java | Level1

728x90
반응형
 

코딩테스트 연습 - 콜라츠 추측

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2

programmers.co.kr

문제 설명
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면,
모든 수를 1로 만들 수 있다는 추측입니다.
작업은 다음과 같습니다.


1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.


예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다.
위 작업을 몇 번이나 반복해야하는지 반환하는 함수, solution을 완성해 주세요.
단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.
제한 조건
  • 입력된 수, num 1 이상 8000000 미만인 정수입니다.
입출력 예
n return
6 8
16 4
626331 -1
  • 입출력 예#1
    16 -> 8 -> 4 -> 2 -> 1 이되어 총 4번만에 1이 됩니다.
  • 입출력 예#2
    626331 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야합니다.

나의 풀이

1. 입력받은 수(num)이 1이 아니면 while문 실행

2. num이 짝수면 2로 나누고 카운트 +1(answer)

3. num이 홀수면 3을 곱하고 1더한 후 카운트 +1(answer)

4. 카운트값(answer)이 500이상이면 -1 리턴

class Solution {
  public int solution(long num) {
      int answer = 0;

        while(num != 1) {
            if(num % 2 == 0){
                num /= 2;
                answer++;
            } else {
                num = (num * 3) + 1;
                answer++;
            }
        }
        if(answer >= 500){
            answer = -1;
        }

      return answer;
  }
}

 

JAVA1 코드 정리

1. 입력받음 값(num)을 변수 n에 저장

2. 0부터 499까지 반복문 실행

3. n의 값이 1이면 반복문 실행 횟수 리턴(i)

4. n의 값이 1이 아니면 짝수:n/2,홀수:n*3+1 진행

5. for문에서 리턴을 받지 못하면 반복 횟수가 500 이상이므로 자연스레 -1 리턴

class Collatz {
    public int collatz(int num) {
    long n = (long)num;
    for(int i =0; i<500; i++){      
      if(n==1) return i;
      n = (n%2==0) ? n/2 : n*3+1;            
    }
    return -1;
  }
}
728x90
반응형