본문 바로가기
코딩테스트/programming_JAVA

[Java] 프로그래머스_12943 : 콜라츠 추측

by prometedor 2023. 11. 29.

콜라츠 추측 : Level 1

 

https://school.programmers.co.kr/learn/courses/30/lessons/12943

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

풀이

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으로 변환하여 계산해야 한다.

깨달은 바 : 오버플로우를 간과하고 문제를 풀었다. 앞으로는 오버플로우 범위도 생각하면서 문제를 풀어야겠다.