/* 콜라츠 추측
* 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을 완성해 주세요.
* 단, 주어진 수가 1인 경우에는 0을,
* 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.
*
* 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.
*
* n result
* 6 8
* 16 4
* 626331 -1
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public class programmer_1_20 { static int a1 = 6; static int a2 = 16; static int a3 = 626331; public int solution(int num) { int answer = 0; long rst = num; while(answer < 500){ if(rst == 1) break; if(rst % 2 == 0) rst = rst / 2; else rst = rst * 3 + 1; answer++; } if(answer == 500 && rst != 1) answer = -1; return answer; } public static void main(String args[]){ programmer_1_20 t = new programmer_1_20(); System.out.println("---------------------------------------"); System.out.println("result = " + t.solution(a1)); System.out.println("---------------------------------------"); // System.out.println("result2 = " + t.solution(a2)); System.out.println("---------------------------------------"); System.out.println("result3 = " + t.solution(a3)); System.out.println("---------------------------------------"); } } | cs |
'프로그래머스 > lv1' 카테고리의 다른 글
핸드폰 번호 가리기 (0) | 2022.12.14 |
---|---|
서울에서 김서방 찾기 (0) | 2022.12.14 |
두 정수 사이의 합 (1) | 2022.12.13 |
나머지가 1이 되는 수 찾기 (1) | 2022.12.13 |
정수 내림차순으로 배치하기 (0) | 2022.12.13 |