코딩테스트 연습 > 콜라츠 추측
1. 풀이 설명
- 500번 while을 돌면서 num이 짝수일 때는
num/2
, 홀수일 때는 num*3+1
을 수행한다. num 이 1이면 몇 번째 반복인지를 반환한다.
2. 나의 풀이
python
def solution(num):
count = 0
while count < 500:
print(count, num)
if num == 1:
return count
if num % 2 == 0:
num /= 2
else:
num = num *3 + 1
count += 1
return -1
kotlin
fun solution(num: Int): Int {
var count = 0
var n: Long = num.toLong()
while (count < 500) {
if (n == 1L) return count
if (n % 2 == 0L) {
n /= 2
} else {
n = n * 3 + 1
}
count += 1
}
return -1
}
3. 배운점
kotlin
: 숫자의 값이 커질 수 있는 경우에 Int
로 입력을 받더라도, Long
으로 자료형 변환이 필요할지 생각해보자.
python
과 kotlin
의 로직이 완벽하게 동일한데, kotlin
에서만 일부 케이스에서 실패가 발생했다.
로그를 찍어 확인해보니 *3+1
을 수행하면서 값이 커지는 순간이 생기는 것을 알게 되었다.
// python
103 1069967879.0
104 3209903638.0
105 1604951819.0
// kotlin - Int 최대값: 2,147,483,647 (2^31 - 1)
103: 1069967879
104: -1085063658
105: -542531829