public class Solution {
public int solution(int num) {
int answer = 0;
while(num != 1 && answer < 500){
if(num % 2 == 0) num /= 2;
else num = num * 3 + 1;
answer++;
}
return answer < 500 ? answer : -1;
}
}
오늘 문제는 어렵진 않았다. 물론 더 좋은 방법이 있을 수 있지만... 아무튼 오늘은 문제에 적혀있는 그대로 while문을 작성하여 if else를 통해 짝수 홀수 구분을 하여 문제에 요구되어 있는데로 작성했다.
정말 문제에 적힌 그대로 작성을 했기 때문에 당연히 통과가 될줄 알았지만 문제를 제출해보니 왕창 틀렸다. 당장 입출력 예에 있는 626331도 result로 488이 출력되었다!
아무리 생각을 해보아도 방법을 못찾겠어서 프로그래머스에 있는 질문하기를 확인해보니, 홀수인 num을 곱하는 과정에서 int형을 벗어나는 경우가 발생하여 그런 것 같다고 적혀있었고 num을 long형으로 수정하니 문제가 해결되었다.
public class Solution {
public int solution(long num) {
int answer = 0;
while(num != 1 && answer < 500){
if(num % 2 == 0) num /= 2;
else num = num * 3 + 1;
answer++;
}
return answer < 500 ? answer : -1;
}
}
오늘의 교훈은, 코딩 테스트를 할 때는 문제에서 기본으로 제공하는 데이터 타입도 의심해보자... 이다. 문제에서 solution의 매개변수가 int 형으로 적혀있길래 당연히 int형 내에서 해결이 될 줄 믿은 내 잘못이다...