단순하게 while문으로 문제에 나온 조건들을 맞춰주고, cnt로 시도횟수 세주고 500번 초과되면 -1을 return하면 되는 간단한 문제.
public static int solution(int num) {
int cnt = 0;
while(num != 1){
if(cnt > 500){
return -1;
}
if(num % 2 == 0){
num /= 2;
}else{
num = num * 3 + 1;
}
cnt++;
}
return cnt;
}
아무리봐도 이게 맞는데 자꾸 테스트케이스 3번626331에서 488이나온다. 테스트케이스가 잘못된줄 알았다.
int의 최대값은 2147483647인데 그게 넘어가서 오류가 나나 싶었다.
그래서 파라미터의 int를 long형으로 바꿔주니 바로 됐다. 어이가 없다. 이럴거면 처음부터 파라미터를 long으로 해주던지;
왜 int로 준건지 이해가 가지 않는다.
public static int solution(long num) {
int cnt = 0;
while(num != 1){
if(cnt > 500){
return -1;
}
if(num % 2 == 0){
num /= 2;
}else{
num = num * 3 + 1;
}
cnt++;
}
return cnt;
}
어이가없다.
'Java > 알고리즘' 카테고리의 다른 글
서울에서 김서방 찾기, "==" 와 ".equals()"의 차이 (0) | 2024.01.12 |
---|---|
음양 더하기 (0) | 2024.01.12 |
두 정수 사이의 합 (1) | 2024.01.08 |
하샤드 수 (1) | 2024.01.05 |
정수 내림차순으로 배치하기 (1) | 2024.01.04 |