[프로그래머스] 콜라츠 추측 (Kotlin)
- ETC../문제 풀이
- 2021. 2. 16.
728x90
문제
이해
1. 짝수라면 2로 나눔
2. 홀수라면 3을 곱하고 1 더함
3. 같은 작업을 1이될때까지 반복
접근
- 1이 될때까지 분기 나눠주기
- count 500 되는 순간 return
풀이
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
}
}
다른 사람의 풀이
class Solution {
fun solution(num: Int): Int = collatzAlgorithm(num.toLong(),0)
tailrec fun collatzAlgorithm(n:Long, c:Int):Int =
when{
c > 500 -> -1
n == 1L -> c
else -> collatzAlgorithm(if( n%2 == 0L ) n/2 else (n*3)+1, c+1)
}
}
728x90
'ETC.. > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 핸드폰 번호 가리기 (Kotlin) (0) | 2021.02.23 |
---|---|
[프로그래머스] 하샤드 수 (Kotlin) (0) | 2021.02.23 |
[프로그래머스] 최대공약수와 최소공배수 (Kotlin) (0) | 2021.02.16 |
[프로그래머스] 키패드 누르기 (Kotlin) (0) | 2021.02.15 |
[프로그래머스] 제일 작은 수 제거하기 (Kotlin) (0) | 2021.02.12 |