Problem
숫자가 주어지면 (각 자리수)^2
의 합이 최종적으로 1 이 되는지 아닌지 판단하는 문제입니다.
Solution
n == 1
이 되지 않는 경우는 무한 반복하는 경우입니다.
무한 반복한다는건 싸이클을 형성한다는 뜻이고 싸이클을 찾는지만 확인하면 됩니다.
Floyd's Cycle Detection Algorithm 을 이용하여 싸이클을 찾을 수 있습니다.
Java Code
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
System.out.print(isHappy(n) ? "HAPPY" : "UNHAPPY");
}
static boolean isHappy(int n) {
int slow = getDigitSum(n);
int fast = getDigitSum(getDigitSum(n));
while (fast != 1 && slow != 1) {
if (fast == slow) {
return false;
}
slow = getDigitSum(slow);
fast = getDigitSum(getDigitSum(fast));
}
return true;
}
static int getDigitSum(int number) {
int sum = 0;
while (number != 0) {
sum += (number % 10) * (number % 10);
number /= 10;
}
return sum;
}
}
'알고리즘 문제 > 백준' 카테고리의 다른 글
백준 4949번. 균형잡힌 세상 (Java) (0) | 2020.04.03 |
---|---|
백준 13913번. 숨바꼭질 4 (Java) (1) | 2020.03.30 |
백준 12851번. 숨바꼭질 2 (Java) (3) | 2020.03.29 |
백준 2293 동전 1 (Java) (0) | 2020.03.28 |
백준 2437번. 저울 (Java) (2) | 2020.03.17 |