[18/07/17] 프로그래머스- Level 1 콜라스 추측
2018. 7. 17. 21:49
콜라츠 추측
1937년 Collatz란 사람에 의해 제기된 이 추측은, 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한 다음, 결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. 입력된 수가 몇 번 만에 1이 되는지 반환하는 함수, solution을 완성해 주세요. 단, 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.
제한 사항
- 입력된 수,
num
은 1 이상 8000000 미만인 정수입니다.
입출력 예
n | result |
---|---|
6 | 8 |
16 | 4 |
626332 | -1 |
입출력 예 설명
입출력 예 #1
문제의 설명과 같습니다.
입출력 예 #2
16 -> 8 -> 4 -> 2 -> 1 이되어 총 4번만에 1이 됩니다.
입출력 예 #3
626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야합니다.
class Solution {
public int solution(long num) {
int cnt = 0;
for (int i = 0; i < 500; i++) {
if (num == 1) {
break;
}
if (num % 2 == 0) {
num = odd(num);
} else {
num = even(num);
}
cnt++;
}
if (cnt >= 500) {
cnt = -1;
}
return cnt;
}
public long odd(long num) {
return num / 2;
}
public long even(long num) {
return num * 3 + 1;
}
}
문제대로 그냥 풀면 된다. do while문을 썼는데 테스트 14에서 계속 실패가 떠서 for문으로 바꿨더니 바로 통과했다. 크게 어려운 점은 없었지만 do while을 못 쓴게 걸린다.
p.s. 다 풀고 문제보기를 하면 626331로 입출력 예 3번이 수정되어 있는데 처음에는 626332로 오타가 적혀있다. 626332는 -1이 절대 안나오기 때문에 참고하면 좋을 듯 하다.
'Get IT Note > 알고리즘' 카테고리의 다른 글
[18/07/19] 프로그래머스- Level 1 하샤드 수 (0) | 2018.07.19 |
---|---|
[18/07/19] 프로그래머스- Level 1 핸드폰 번호 가리기 (0) | 2018.07.19 |
[18/07/17] 프로그래머스- Level 1 최대 공약수와 최소 공배수 (0) | 2018.07.17 |
[18/07/17] 프로그래머스- Level 1 행렬의 덧셈 (0) | 2018.07.17 |
[18/07/16] 프로그래머스- Level 1 제일 작은 수 제거하기 (0) | 2018.07.16 |