MAX_VALUE

0

TIL

목록 보기
109/126

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

알고리즘 Collatz 추측 문제를 풀기 위해 while문에 if문으로 코드를 작성 중이었다.
추가 조건 중에 500번 반복할 때 까지 1이 나오지 않는다면 -1을 반환하라는 조건이 있었고,

public class Test_13_CollatzGuesses {
    public int solution(int num) {
        int count = 0;
        while (num != 1) {
            if (num % 2 == 0) {
                num = num / 2;
                count++;
            } else {
                num = num * 3 + 1;
                count++;
            }
        }
        if (count >= 500) {
            count = -1;
        }
        return count;
    }
}

이렇게 작성을 해보았는데 3번째 케이스에서 실패가 발생했다.

케이스 3은 num = 626331으로 500번이 넘어가기 때문에 -1을 반환해야했는데 자꾸만 결과값이 500을 넘지 못하고 488이 나왔다.

구글에 검색을 해보니 파라미터가 int형이기 때문에 maximum value를 초과했던 것이었다.

int를 long으로 변형하여 쉽게 해결할 수 있었지만,
분명 MAX_VALUE, MIN_VALUE를 사용해 배웠던 것들인데 구글링을 하기 전까지 모르고 있었다는 것이 스스로에게 아쉬웠다.

public static void main(String[] args) {
    System.out.println("Byte / Min : " + Byte.MIN_VALUE + ", Max : " + Byte.MAX_VALUE);
    System.out.println("Short / Min : " + Short.MIN_VALUE + ", Max : " + Short.MAX_VALUE);
    System.out.println("Int / Min : " + Integer.MIN_VALUE + ", Max : " + Integer.MAX_VALUE);
    System.out.println("Long / Min : " + Long.MIN_VALUE + ", Max : " + Long.MAX_VALUE);
}

Byte / Min : -128, Max : 127
Short / Min : -32768, Max : 32767
Int / Min : -2147483648, Max : 2147483647
Long / Min : -9223372036854775808, Max : 9223372036854775807

다음부터 항상 확인하는 것은 아니더라도 의심은 해보는 습관을 들이는 것이 중요할 것 같다.

0개의 댓글