
나의 코드
class Solution {
public int solution(int num) {
int count = 0;
if (num == 1) {
return 0;
}
while( num != 1){
if(num % 2 == 0){
num /= 2;
}else {
num = (num * 3) + 1;
}
count ++;
if(count == 500){
return -1;
}
}
return count;
}
}
이렇게 돌렸는데..
| 테스트 3 | |
| 입력값 〉 | 626331 |
| 기댓값 〉 | -1 |
| 실행 결과 〉 | 실행한 결괏값 488이 기댓값 -1과 다릅니다. |
테스트를 통과하지 못했다.. 이유를 찾아보니
횟수가 증가하면서 숫자가 커져 오버플로우가 발생한 것을 알게되었다.
class Solution {
public int solution(long num) {
int count = 0;
if (num == 1) {
return 0;
}
while( num != 1){
if(num % 2 == 0){
num /= 2;
}else {
num = (num * 3) + 1;
}
count ++;
if(count == 500){
return -1;
}
}
return count;
}
}
매개변수를 Long 타입으로 바꿔주니 해결되었다.
다른 사람의 풀이
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;
}
}
'알고리즘' 카테고리의 다른 글
| [프로그래머스] 나누어 떨어지는 숫자 배열 (1) | 2024.11.09 |
|---|---|
| [프로그래머스] 서울에서 김서방 찾기(Java) (0) | 2024.11.08 |
| [프로그래머스] 두 정수 사이의 합(Java) * (0) | 2024.11.06 |
| [프로그래머스] 하샤드 수(Java) (0) | 2024.11.05 |
| [프로그래머스] 정수 내림차순으로 배치하기(Java) * (0) | 2024.11.04 |