TIL ~ 24.04.05
콜라츠 추측
wlsds00_
2023. 12. 20. 10:28
23. 콜라츠 추측
class Solution {
fun solution(num: Int): Int {
var longNum = num.toLong()
var count = 0
while (count < 500 && longNum > 1) {
count ++
longNum = if (longNum % 2 == 0L) longNum / 2 else longNum * 3 + 1
}
return if (count == 500) -1 else count
}
}
오늘은 풀긴 했는데 답 세개를 다 통과 못해서... 조건이 늘어날수록 코드가 꼬이는 느낌이다.
그래도 푸신 분 코드 보니까 내 코드도 아주 틀린 건 아닌것같다. 그냥 누더기여서 어디가 잘못된거지.
우선 num을 long 으로 바꿔준다. 그리고 500회를 셀수있는 count를 만들어서 while 문 안에서 count가 500보다 작고, longNum이 1보다 큰 두 조건을 만족할 경우에 카운트를 ++ 로 1 올리고 if문으로 짝수일때 2로 나누고 홀수일때 3을 곱해서 1을 더하게 한다. 그리고 만약 count가 500과 같으면 -1을 하고 else로 count를 한다.
마지막에 count 부분을 잘 이해하지 못해서 chatGPT에게 설명을 시켜보았다.
루프가 count가 500에 도달하여 종료된 경우에는 수열이 500번의 반복 동안 1에 도달하지 못했다는 것을 의미합니다.
이 경우 함수는 -1을 반환합니다. 그렇지 않으면 수열이 1에 도달하는 데 걸린 반복 횟수인 count의 값을 반환합니다.
따라서 else count 부분은 본질적으로 루프가 최대 500번 반복되거나 1에 도달하여 종료되었는지에 따라 반환할 값을 결정하는 역할을 합니다.