문제
조건
정답
int solution(long num) {
int answer = 0;
if (num == 1) {
return answer;
}
while (true) {
if (num % 2 == 0) {
num /= 2;
answer++;
} else {
num = num * 3 + 1;
answer++;
}
if (num == 1) {
break;
}
if (answer == 500) {
answer = -1;
break;
}
}
return answer;
}
후기
이 문제는 코드 자체는 간단하게 작성할 수 있었는데
제한사항을 통해 8,000,000 미만 수를 계산한다는 가정 하에
단 3번 만에 값이 배로 늘어난 것이 확인 가능했다
짝수일 때는 / 2, 홀수일 때는 * 3 + 1 을 한번씩 하는 상황에서
num 이 1이 될때까지 계속 진행되는 코드인데 500번까지만 한다고 해도 엄청나게 숫자가 불어난다
그 탓인지 작은 수를 입력했을 때는 잘 나오는 코드가
큰 수만 나오면 빨간줄을 불러온다
num 값의 타입은 int 인데 int 의 표현 범위를 넘어서는 것 같다
그래서 처음부터 받아올 때 가장 표현 범위가 넓은 long 타입으로 변경해서 진행했다
이제 큰 수에도 정상작동 하는 것을 확인 가능
'코딩 테스트 연습 > 알고리즘' 카테고리의 다른 글
[ 코딩 테스트 ] 나누어 떨어지는 숫자 배열 (0) | 2024.05.21 |
---|---|
[ 코딩 테스트 ] 서울에서 김서방 찾기 (0) | 2024.05.16 |
[ 코딩 테스트 ] 두 정수 사이의 합 (0) | 2024.05.10 |
[ 코딩 테스트 ] 하샤드 수 (0) | 2024.05.09 |
[ 코딩 테스트 ] 정수 내림차순으로 배치하기 (0) | 2024.05.03 |