콜라츠 추측 : Level 1
https://school.programmers.co.kr/learn/courses/30/lessons/12943
풀이
class Solution {
public int solution(int num) {
int cnt = 0;
long n = (long) num;
if (n == 1) return 0;
while (n != 1 && cnt != 500) {
if (n % 2 == 0) {
n /= 2;
} else if (n % 2 != 0) {
n = n * 3 + 1;
}
cnt++;
}
if (n != 1) return -1;
return cnt;
}
}
오버플로우(Overflow)
오버플로우(Overflow)는 데이터가 특정 자료형의 표현 범위를 벗어나는 경우 발생하는 현상이다.
간단히 말해서, 변수나 데이터의 값이 표현 가능한 범위를 초과하여 최댓값을 넘어가거나 최솟값 미만으로 내려갈 때 발생한다.
예를 들어, 정수 자료형(int)은 특정 범위의 정수만을 표현할 수 있다.
32비트의 int 자료형은 약 -2,147,483,648부터 2,147,483,647까지의 값을 표현할 수 있다.
만약 이 범위를 초과하는 값을 할당하면 오버플로우가 발생한다.
int maxValue = Integer.MAX_VALUE; // 2,147,483,647
int overflowedValue = maxValue + 1; // 이 코드는 오버플로우를 발생시킵니다.
이 경우 overflowedValue 변수는 최댓값을 넘어가기 때문에 정상적인 동작을 보장할 수 없다. 이러한 상황에서는 의도하지 않은 동작이 발생할 수 있으며, 프로그램이 예기치 않은 결과를 보일 수 있다.
오버플로우는 다양한 자료형에서 발생할 수 있으며, 프로그램에서 이를 방지하고 예외 처리하는 것이 중요하다.
또한, 데이터의 범위를 고려하여 적절한 자료형을 선택하는 것이 중요하다.
문제점 : 오버플로우 발생
해당 문제에서 오버플로우가 발생하는 이유는 주어진 수가 int의 범위를 넘어서기 때문이다. 주어진 수가 8,000,000을 넘어가면서 연산을 반복하다 보면 int의 최댓값을 초과하게 된다. 문제에서 주어진 수의 범위는 1 이상 8,000,000 미만이다.
해결 : 따라서 해당 범위를 벗어나지 않도록 주어진 수를 long으로 변환하여 계산해야 한다.
깨달은 바 : 오버플로우를 간과하고 문제를 풀었다. 앞으로는 오버플로우 범위도 생각하면서 문제를 풀어야겠다.
'코딩테스트 > programming_JAVA' 카테고리의 다른 글
[Java] 프로그래머스_12906 : 같은 숫자는 싫어 (2) | 2023.12.05 |
---|---|
[Java] 프로그래머스_12940 : 최대공약수와 최소공배수 (0) | 2023.12.04 |
[Java] 프로그래머스_43163 : 단어 변환 (0) | 2023.11.24 |
[Java] 프로그래머스_43162 : 네트워크 (2) | 2023.11.24 |
[Java] 프로그래머스_43165 : 타겟 넘버 (2) | 2023.11.23 |