https://velog.io/@gilgyu4125/23.06.15-TIL
https://school.programmers.co.kr/learn/courses/30/lessons/12943
이 문제를 풀때 3번째 입력 값에서 계속 예상된 값이 아닌 수가 출력이 되었다. 계속 코드를 확인해도 이상이 없다고 생각이 들었는데 찾아보니 데이터 값 입력 후 코드 연산상에서 오버플로우가 발생하여 데이터가 손실된다는 것을 알게 되었다.
class Solution {
// 입력 num 값을 int -> long로 수정
public int solution(long num) {
int count = 0;
// 입력 값이 1이면 0값 return
if (num == 1) {
return 0;
}
// 반복문을 통한 입력 값이 1 일 될때 까지 반복
while (num != 1) {
if (num % 2 == 0) {
num = num / 2;
count++;
} else {
num = (num * 3) + 1;
count++;
}
}
// 반복수가 500번 이상 이면 -1 return
if (count >= 500) {
return -1;
} else {
return count;
}
}
}
문제에서 입력값 타입을 int에서 long으로 수정후 오버플로우 문제 해결
컴퓨터의 데이터는 0과 1로 나뉘어져 있으며, 이 크기는 1bit 이다. 자료형 마다 크기가 정해져 있다. 이러한 크기가 넘은 값이 입력되면 자료값이 손실되는 것을 오버플로우라고 한다.