멍두의 개발새발

[프로그래머스] 콜라츠 추측 in Java 본문

Algorithm/Programmers

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

멍두 2024. 5. 5. 00:12
반응형

📍 문제

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

 

프로그래머스

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

programmers.co.kr

📍 문제설명

입력한 수가 1이 될 때까지 for문을 돌려 계산한다.

500번까지 돌려도 1이 되지 않으면 -1을 반환한다.

📍 코드

❌ 틀린코드

더보기
더보기
더보기
더보기
더보기
더보기
class Solution {
    public int solution(int num) {
        int cnt = 0;
        
        for(int i = 0;i < 500; i++){
            if(num == 1){
                return cnt;
            }
            if(num % 2 == 0){
                num /= 2;
            }else{
                num *= 3;
                num += 1;
            }
            cnt++;
        }
        
        return -1;
    }
}

✔️ 정답코드

더보기
더보기
더보기
더보기
더보기
더보기
class Solution {
    public int solution(int num) {
        int cnt = 0;
        long longNum = (long)num;
        
        for(int i = 0;i < 500; i++){
            if(longNum == 1){
                return cnt;
            }
            if(longNum % 2 == 0){
                longNum /= 2;
            }else{
                longNum *= 3;
                longNum += 1;
            }
            cnt++;
        }
        
        return -1;
    }
}

 

📍 틀린이유

입력한 num의 범위가 1 ~ 8,000,000인데 *3을 하면 int의 범위를 벗어날 수도 있다.

long으로 할당해준뒤 계산을 해야한다.

📍 기억할 것

java에서 int는 4바이트의 크기를 가진다 ( -2,147,483,648 ~ 2,147,483,647 )

java에서 long은 8바이트의 크기를 가진다 (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)

 

 

반응형