알고리즘

백준 알고리즘 2331 구현

창따오 2023. 12. 2. 00:30
728x90

문제출처 : https://www.acmicpc.net/problem/2331


소스코드

package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Baek2331 {
    static int a, p;
    static int answer =0;
    static List<Integer> numList = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        a = Integer.parseInt(st.nextToken());
        p = Integer.parseInt(st.nextToken());
        numList.add(a);
        calcNext(a,p);
        System.out.println(answer);
    }

    static void calcNext(int prev, int p) {
        while (true) {
            int sum = 0;
            while (prev != 0) {
                int eachNum = prev%10;
                sum += (int) Math.pow(eachNum, p);
                prev/=10;
            }
            if (numList.contains(sum)) {
                answer= numList.indexOf(sum);
                break;
            } else {
                numList.add(sum);
                prev = sum;
            }
        }
    }

}

느낀점 : 문제를 풀다가 58부터 반복된다고 적혀있어서 indexOf를 사용하게 되면 5가 나온다고 생각을 하고 hashMap을 이용해서 풀고 있었다. 하지만 37부터 반복된다는 것을 알았고, indexOf 메소드를 이용하여 비교적 쉽게 풀 수 있었다. 문제를 좀 더 꼼꼼하게 볼 필요성을 느꼈다.