콜라츠 추측

문제 링크

콜라츠 추측

분석

문제의 주어진 과정을 진행 해 과정 중 값이 1이 나오면 횟수를 반환하고, 1이 나오지 않으면 -1을 반환하는 문제입니다.

반복문을 사용하거나 재귀함수를 사용해서 풀 수 있는 문제입니다.
굳이 재귀함수를 사용할 필요는 없으로 반복문만 사용해보겠습니다.

풀이

int solution(int num) {
    int answer = -1;
    long long n = num;
    
    for (int i = 0; i < 500; ++i)
    {   
        if (1 == n)
        {
            answer = i;
            break;
        }

        n = (0 == n % 2) ? n / 2 : n * 3 + 1;
    }
    
    return answer;
}

answer은 기본적으로 -1의 값을 미리 가지고 시작합니다.
n변수는 계산 중 int자료형의 범위를 넘는 오버플로우가 발생할 수 있으므로 long long자료형을 사용합니다.

n이 처음부터 1일 수 도 있으므로 먼저 if문을 사용해 값을 확인합니다.
이후에 반복문을 돌면서 n이 1이 된다면 반복 횟수를 반환합니다.
만약 반복문을 돌면서 n이 1이 되지 못한다면 answer의 값은 수정되지 않으므로 -1이 반환됩니다.

성능 요약

테스트 1 〉 통과 (0.01ms, 4.15MB)
테스트 2 〉 통과 (0.01ms, 4.2MB)
테스트 3 〉 통과 (0.01ms, 4.19MB)
테스트 4 〉 통과 (0.01ms, 4.12MB)
테스트 5 〉 통과 (0.01ms, 4.23MB)
테스트 6 〉 통과 (0.01ms, 4.19MB)
테스트 7 〉 통과 (0.01ms, 4.21MB)
테스트 8 〉 통과 (0.01ms, 4.22MB)
테스트 9 〉 통과 (0.01ms, 4.14MB)
테스트 10 〉 통과 (0.01ms, 4.13MB)
테스트 11 〉 통과 (0.01ms, 4.21MB)
테스트 12 〉 통과 (0.01ms, 4.15MB)
테스트 13 〉 통과 (0.01ms, 4.13MB)
테스트 14 〉 통과 (0.01ms, 4.24MB)
테스트 15 〉 통과 (0.01ms, 3.69MB)
테스트 16 〉 통과 (0.01ms, 4.21MB)

Programmers 카테고리 내 다른 글 보러가기

댓글남기기