
문제해석
숫자 n이 happy인지 판단하기
happy number는 다음과 같이 정의한다
양의 정수로 시작해 각자릿수의 제곱을 더한다.
위 과정을 반복해 1이 나오면 종료하거나 아니면 무한히 반복한다.
과정의 마지막이 1이면 happy number
정답 예)
public boolean isHappy(int n) {
// 각자릿수의 제곱의 값이 반복되어 나오는지 체크하기 위한 자료구조
// add와 contains를 사용하므로 O(1)의 비용이 드는 HashSet 사용
Set<Integer> set = new HashSet<>();
while (n != 1) {
int digit;
int num = n;
n = 0;
while (num != 0) {
// 각 자릿수 계산
digit = num % 10;
// 자릿수 마다 제곱해 더한다
n += digit * digit;
num = num / 10;
}
// 모든 자릿수를 제곱해 더한 값이 이미 기존에 처리한 이력이 있는지 체크
// 반복된다면 false;
if (set.contains(n)) {
return false;
}
set.add(n);
}
return true;
}
다른 답들을 찾아보니 n이 7이 되는 경우에는 결국 1이 된다는 사실을 이용한 풀이도 있었다.
public boolean isHappy(int n) {
while (n > 10) {
int digit;
int num = n;
n = 0;
while (num != 0) {
// 각 자릿수 계산
digit = num % 10;
// 자릿수 마다 제곱해 더한다
n += digit * digit;
num = num / 10;
}
}
// n이 7인 경우에도 최종 결과는 1에 도달
return (n == 1 || n == 7) ? true : false;
}'Algorithm' 카테고리의 다른 글
| [leetcode75] 19. Remove Nth Node From End of List (0) | 2023.04.08 |
|---|---|
| [leetcode 75] 43. Multiply Strings (0) | 2023.04.06 |
| [leetcode 75] 278. First Bad Version (0) | 2023.03.02 |
| [leetcode 75] 844. Backspace String Compare (0) | 2023.03.01 |
| [leetcode 75] 1. Two Sum (0) | 2023.02.28 |