Coding Test/Java Coding Test

[프로그래머스 / 자바] - 콜라츠 추측

nam_ji 2024. 1. 18. 10:39

콜라츠 추측

문제

  • 정수 num이 매개변수로 주어집니다.
  • 콜라츠 추측 문제로
    1. 입력된 수가 짝수면 2로 나누고
    2. 입력된 수가 홀수면 3을 곱하고 1을 더합니다.
    3. 위 조건을 1일 나올 때까지 반복합니다.
  • 위 조건을 만족해야 하는 문제입니다.
  • 1이 되기까지 500번 반복할 경우 -1을 출력하고 그렇지 않고
  • 1번만 반복할 경우 0을 그렇지 않다면
  • 몇번의 반복을 했는지 출력하는 문제입니다.


테스트(이클립스)

  • while문을 이용하여 n이 1이 될때까지 반복하도록 하고
    • n != 1은 1이 아니라면 true이고 1이라면 false가 되기 때문에 while문 조건으로 주었습니다.
  • while문 안에는 if문을 사용하여 n을 2로 나눴을 때 0이면 n을 2로 나눈 몫을 담고
  • else에는 n에 n 곱하기 3 더하기 1을 담고
  • count는 한번 반복 시 증가할 수 있게 ++를 해주었습니다.
  • 또 다른 if문을 만들어 count가 500이상이 되면 count에 -1을 담고 break로 while문을 멈추게 했습니다.
package com.namji.codingtest.level0;

public class ColatzGuess {
	public static void main(String[] args) {
		/*
		 * 정수 n이 매개변수로 주어집니다.
		 * n을 이용하여 콜라츠 추측을 
		 */
		long n = 6;
		int count = 0;
		while (n != 1) {
			if (n % 2 == 0) {
				n /= 2;
			} else {
				n = n * 3 + 1;
			} 
			count++;
			if (count >= 500) {
				count = -1;
				break;
			}
		}
		
//		for (int i = 0; i < 500; i++) {
//			n = (n % 2 == 0) ? (n / 2) : (n * 3 + 1);
//			if (n == 1) {
//				count = i +1;
//				break;
//			}
//			count = -1;
//		}
		
		System.out.println(count);
	}
}


프로그래머스 코드

class Solution {
    public int solution(long num) {
        int answer = 0;
        while (num != 1) {
            if (num % 2 == 0) {
                num /= 2;
            } else {
                num = num * 3 + 1;
            }
            answer++;
            
            if (answer >= 500) {
                answer = -1;
                break;
            }
        }
        return answer;
    }
}