public class Solution {
public int solution(int num) {
int answer = 0;
long n = num;
if (n == 1)
{
return 0;
}
int i = 0;
while (true)
{
if (n % 2 == 0)
{
n /= 2;
}
else
{
n = (n * 3) + 1;
}
i++;
if (n == 1)
{
answer = i;
break;
}
else if (i == 500)
{
return -1;
}
}
return answer;
}
}
* 계산과정에서 num이 int형 범위를 넘어가는 경우를 생각해서, long으로 계산
처음에 코드가 맞는데 계속 입출력 예 #3에서 계속 오류 생겨서 한참을 생각했다.
앞서 알고리즘을 풀면서 형변환이나 자료형 범위를 벗어서나 오류가 생기는 경우가 문득 생각이 났다.
입출력 예 #3 처럼 큰 수가 초기 num 값이라면, 곱하기와 더하기를 계속 하다보면 ing형 범위를 벗어나는 것이 아닐까 라는 생각이 들었고, 계산 과정 식을 long형으로 진행하니 오류가 나지 않았다.
'C# 알고리즘 코드카타' 카테고리의 다른 글
25. 나누어 떨어지는 숫자 배열 (0) | 2023.11.10 |
---|---|
24. 서울에서 김서방 찾기 (0) | 2023.11.09 |
22. 두 정수 사이의 합 (0) | 2023.11.08 |
21. 하샤드 수 (0) | 2023.11.08 |
20. 정수 내림차순으로 배치하기 (0) | 2023.11.07 |