본문 바로가기
C#/프로그래머스

[프로그래머스] C# : 콜라츠 추측

by TODAYCODE 2021. 7. 31.
반응형

프로그래머스 코딩테스트 연습 Level 1 - 콜라츠 추측

 

코딩테스트 연습 - 콜라츠 추측

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

programmers.co.kr

 

문제의 핵심

1. 반복문의 활용

2. 정수형의 적절한 사용

 


 

문제를 언뜻보면 그냥 반복문으로 구현만 해주는 간단한 문제로 보인다.

그래서 아무생각이 반복문으로 구현하면 절대로 해결할 수가 없다.

 

이 문제에는 직접적으로는 보이지 않는 함정이 존재한다.

바로 홀수일때 곱하기 3을 한다는 점이다.

 

 

int형이 담을 수 있는 숫자가 곱하기 3을 하면서

int형의 범위를 넘어버리는 경우에 문제가 발생한다.

최대치를 넘어버리면 다시 최소값으로 돌아가기 때문에 의도하지 않는 결과가 초래된다.

 

 

따라서... 곱하기 3을 해도 오류가 발생하지 않기 위해서

입력된 int형의 n을 long형으로 변환해주어야한다.

 

그러면 안전하게 이번 문제를 해결할 수 있다.

 

 

 

 

정답 코드

public class Solution
    {
        public int solution(int num)
        {
        // 입력받은 int형의 num을 long으로 변환해준다.
            long temp = num;
            // 반복 횟수를 측정
            int answer = 0;
            // 숫자가 1이될때까지 반복한다.
            while (temp != 1)
            {
            // 반복횟수를 1 올려준다.
                ++answer;
                
                // 숫자가 짝수면 나누기 2 , 홀수면 3곱하고 1을 더함
                temp = temp % 2 == 0 ? temp / 2 : temp * 3 + 1;
                
                // 만약 반복숫자가 500이 넘어버리면
                if (answer > 500)
                {
                    return -1;
                }
            }
            // 몇번 반복했는지 리턴
            return answer;
        }
    }

 

 

 

 

반응형

댓글