Jakorithm
article thumbnail
728x90

문제

https://www.codetree.ai/training-field/search/problems/cycle?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

숫자 N과 P가 주어집니다.

처음에는 N으로 시작합니다.

다음에는 그 숫자에 N을 곱하고 P로 나눈 나머지를 구합니다.

이 행동을 반복하면 언젠가는 이미 등장했던 숫자가 등장하게 됩니다.

이때 반복되는 사이클의 크기를 구하는 프로그램을 작성해 보세요.

 

입력 예시

67 31

 

출력 예시

3

 

 

코드

첫 번째 줄에 정수 n과 p가 공백으로 구분되어 주어진다.

  • 1 <= n <= 1,000
  • 2 <= p <= 97
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int p = Integer.parseInt(st.nextToken());
        br.close();

        // 등장한 수를 담기위한 list
        List<Integer> list = new ArrayList<>();
        list.add(n); // n 담기
        int temp = n; // 연산을 수행할 temp

        while (true) {
            temp = (temp * n) % p; // 사이클 연산

            // 연산된 수가 list에 존재하는지 확인
            if (list.contains(temp)) {
                // 사이클 구하기(list의 크기 - temp의 인덱스)
                int cycle = list.size() - list.indexOf(temp);
                bw.write(String.valueOf(cycle)); // 출력
                break;
            }

            // list에 temp 추가
            list.add(temp);
        }

        bw.flush();
        bw.close();
    }
}
728x90