[프로그래머스][C++] 콜라츠 추측
콜라츠 추측
문제 링크
분석
문제의 주어진 과정을 진행 해 과정 중 값이 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)
댓글남기기