백준 싸이클

KIMYEONGJUN·2024년 11월 7일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 처음 시작하는 두 자연수 N과 P가 공백을 사이에 두고 주어진다.

첫째 줄에 반복되는 부분에 포함된 서로 다른 수의 개수를 출력한다.

내가 이 문제를 보고 생각해본 부분

주어진 (N)과 (P)를 이용해 새로운 수를 생성하고,
그 수가 언제 반복되는지를 추적하여 반복되는 수의 개수를 계산한다.
HashSet을 사용하여 중복을 자동으로 관리하고,
반복이 발생할 때까지 계속 계산을 수행합니다. 최종적으로 반복되는 수의 개수를 출력한다.

코드로 구현

package baekjoon.baekjoon_24;

import java.io.*;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

// 백준 2526번 문제
public class Main830 {
    public static void main(String[] args) throws Exception {
        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());

        int value = N;
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        while(true) {
            value = (value * N) % P;
            if(!set1.add(value)) {
                if(!set2.add(value)) {
                    break;
                }
            }
        }

        bw.write(set2.size() + "");
        bw.flush();
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글