Lv1. 콜라츠 추측

Hello·2022년 7월 23일
0

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

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. 배운점

  1. kotlin: 숫자의 값이 커질 수 있는 경우에 Int로 입력을 받더라도, Long으로 자료형 변환이 필요할지 생각해보자.
    pythonkotlin 의 로직이 완벽하게 동일한데, kotlin 에서만 일부 케이스에서 실패가 발생했다.
    로그를 찍어 확인해보니 *3+1 을 수행하면서 값이 커지는 순간이 생기는 것을 알게 되었다.
  • Log (n=626331)
// 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

profile
안녕하세요 :)

0개의 댓글