티스토리 뷰

728x90
행복한 수란,
각 자리수를 제곱한 것을 더하는 과정을 반복했을 때 1로 끝나는 수 이다.
행복한 수가 아니라면 1에 도달하지 못하고 같은 수열이 반복하게 된다.

 

행복한 수 찾는 방법

 

주어진 수가 19일때

 

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

 


주어진 숫자를 일의자리와 십의 자리를 각각 제곱한 값을 ArrayList 에 넣어주었다.

ArrayList 를 사용하면 계산된 결과가 contain 을 통해서 이전 계산에 같은 결과가 나왔는지 알 수 있기 때문에 사용하였다.

 

주어진 수의 자릿수는 계산할때 마다 달라지기 떄문에 Interger.toString(n).length() 를 통해서 숫자의 자릿수를 알 수 있었다.

 

주어진 수를 나머지 연산으로 일의 자리부터 제곱해서 계속 더해가는 방법을 사용하였다.

 

 

 

import java.util.ArrayList;
import java.util.HashSet;

public class Practice4 {
    public static boolean solution(int n) {
        ArrayList list = new ArrayList<Integer>();
        boolean check = false;

        list.add(n);

        while (true){
            int a = 0;
            int b = 0;

            for (int i = 0; i <= Integer.toString(n).length(); i++) {
                b = n % 10;
                n = n / 10;
                a = a + b * b;
            }
            if(n == 1 && a == 0){
                check = true;
                break;
            }
            else if(list.contains(a) == true){
                check = false;
                break;
            }
            else if(a!=1 && !list.contains(a)){
                list.add(a);
                n = a;
                check = false;
            }
        }

        return check;
    }

    public static void main(String[] args) {
        // Test code
        System.out.println(solution(19));
        System.out.println(solution(2));
        System.out.println(solution(61));
    }
}

 

 

HashSet 을 사용하면 중복된 값이 들어가지 않아 기존에 저장된 값을 찾아서 비교하는 과정이 생략 될 것 같다.

HashSet 을 사용하여 다른 방식으로 한번 다시 코드 작성 해봐야겠다.

 

 

 

728x90