[leetcode 202] Happy Number
202. Happy Number
해결 과정
반복
이 되는 작업을 생각해보았다.
- 주어진 숫자를 쪼갠다 -> 제곱해서 더한다 -> 더한 값이 1인지 검사
반복
이 사용되기 때문에 탈출조건
도 생각한다.
- 입력 값이 1일때, 그리고 같은 입력이 또 들어왔을때
코드
fun isHappy(n: Int): Boolean {
if(n==1) return true
var input = n
val tested = HashSet<Int>()
while(tested.add(input)) {
var tempSum = 0
var num = 0
while (input > 0) {
num = input % 10
tempSum += num * num
input /= 10
}
if (tempSum == 1)
return true
else
input = tempSum
}
return false
}
배운 점
- 같은 값이 또 들어왔는지를 검사할 땐
HashSet
을 사용하면 된다.
HashSet의 add(E e)
메소드는 입력 e 를 이미 가지고 있을 때 false를 반환
- Int 값을 쪼개서 다루고 싶을 때는
%
연산자를 사용한다.
- 항상 더 효율적인 방법은 없을지 생각하자.
습관적으로 Int 값을 쪼개서 다루어야할 때 (ex. 15라면, 1과 5) charArray로 변경하여 사용했었는데, 공간/연산 비용면에서 효율적이지 않았다.
아래와 같은 방법으로 각 자리수를 사용할 수 있다.
while (n > 0) {
num = n % 10
// TODO
n /= 10
}
Leave a comment