티스토리 뷰

프로그래머스 12943번 - 콜라츠 추측

프로그래머스 12943번 - https://programmers.co.kr/learn/courses/30/lessons/12943

 

요구사항

1-1. 입력된 수가 짝수라면 2로 나눕니다.

1-2. 입력된 수가 홀수라면 3으로 곱하고 1을 더합니다.

2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

3. 작업을 500번을 반복해도 1이 되지 않는다면 -1을, 된다면 작업 횟수를 반환하라.

 

요구사항 분석 및  풀이과정

1. 너무 간단해서 주어진대로 하면 된다.

 

소스코드 작성

class Solution {

    public int solution(int num) {
        int count = 0;
        long value = num;
        
        while(value != 1 && count++ < 500) {
            if (value % 2 == 0) value /= 2;
            else value = 3 * value + 1;
        }
        
        return value == 1 && count < 500 ? count : -1;
    }
}

 

결과

 

주의해야하는 점

주어진대로 구현을 하였는데 3번째 테스트 케이스에서 실패했다. 실패할 이유가 없어서 계속 고민을 해보았는데, 3을 곱하면서 수가 커짐에 따라 오버플로우가 발생한 것이었다. 맘 편히 long을 사용하자.

 

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함