Coding Test/Java Coding Test
[프로그래머스 / 자바] - 콜라츠 추측
nam_ji
2024. 1. 18. 10:39
콜라츠 추측
문제
- 정수 num이 매개변수로 주어집니다.
- 콜라츠 추측 문제로
- 입력된 수가 짝수면 2로 나누고
- 입력된 수가 홀수면 3을 곱하고 1을 더합니다.
- 위 조건을 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;
}
}