๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 6064 ์นด์ž‰ ๋‹ฌ๋ ฅ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 8. 25.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/6064

  • ์ตœ๊ทผ์— ICPC ํƒ์‚ฌ๋Œ€๋Š” ๋‚จ์•„๋ฉ”๋ฆฌ์นด์˜ ์ž‰์นด ์ œ๊ตญ์ด ๋†€๋ผ์šด ๋ฌธ๋ช…์„ ์ง€๋‹Œ ์นด์ž‰ ์ œ๊ตญ์„ ํ† ๋Œ€๋กœ ํ•˜์—ฌ ์„ธ์›Œ์กŒ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ์นด์ž‰ ์ œ๊ตญ์˜ ๋ฐฑ์„ฑ๋“ค์€ ํŠน์ดํ•œ ๋‹ฌ๋ ฅ์„ ์‚ฌ์šฉํ•œ ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
  • ๊ทธ๋“ค์€ M๊ณผ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜ x, y๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ ๋…„๋„๋ฅผ <x:y>์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€๋‹ค.
  • ๊ทธ๋“ค์€ ์ด ์„ธ์ƒ์˜ ์‹œ์ดˆ์— ํ•ด๋‹นํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ํ•ด๋ฅผ <1:1>๋กœ ํ‘œํ˜„ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ํ•ด๋ฅผ <2:2>๋กœ ํ‘œํ˜„ํ•˜์˜€๋‹ค. <x:y>์˜ ๋‹ค์Œ ํ•ด๋ฅผ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ <x':y'>์ด๋ผ๊ณ  ํ•˜์ž.
  • ๋งŒ์ผ x < M ์ด๋ฉด x' = x + 1์ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด x' = 1์ด๋‹ค.
  • ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋งŒ์ผ y < N์ด๋ฉด y' = y + 1์ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด y' = 1์ด๋‹ค. <M:N>์€ ๊ทธ๋“ค ๋‹ฌ๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ํ•ด๋กœ์„œ, ์ด ํ•ด์— ์„ธ์ƒ์˜ ์ข…๋ง์ด ๋„๋ž˜ํ•œ๋‹ค๋Š” ์˜ˆ์–ธ์ด ์ „ํ•ด ์˜จ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, M = 10 ์ด๊ณ  N = 12๋ผ๊ณ  ํ•˜์ž. ์ฒซ ๋ฒˆ์งธ ํ•ด๋Š” <1:1>๋กœ ํ‘œํ˜„๋˜๊ณ , 11๋ฒˆ์งธ ํ•ด๋Š” <1:11>๋กœ ํ‘œํ˜„๋œ๋‹ค. <3:1>์€ 13๋ฒˆ์งธ ํ•ด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , <10:12>๋Š” ๋งˆ์ง€๋ง‰์ธ 60๋ฒˆ์งธ ํ•ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋„ค ๊ฐœ์˜ ์ •์ˆ˜ M, N, x์™€ y๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, <M:N>์ด ์นด์ž‰ ๋‹ฌ๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ํ•ด๋ผ๊ณ  ํ•˜๋ฉด <x:y>๋Š” ๋ช‡ ๋ฒˆ์งธ ํ•ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์€ T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” ํ•œ ์ค„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ๊ฐ ์ค„์—๋Š” ๋„ค ๊ฐœ์˜ ์ •์ˆ˜ M, N, x์™€ y๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M, N ≤ 40,000, 1 ≤ x ≤ M, 1 ≤ y ≤ N) ์—ฌ๊ธฐ์„œ <M:N>์€ ์นด์ž‰ ๋‹ฌ๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ํ•ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ถœ๋ ฅ์€ ํ‘œ์ค€ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด, ์ •์ˆ˜ k๋ฅผ ํ•œ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ k๋Š” <x:y>๊ฐ€ k๋ฒˆ์งธ ํ•ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋งŒ์ผ <x:y>์— ์˜ํ•ด ํ‘œํ˜„๋˜๋Š” ํ•ด๊ฐ€ ์—†๋‹ค๋ฉด, ์ฆ‰, <x:y>๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์€ ํ‘œํ˜„์ด๋ฉด, -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

     

์•„์ด๋””์–ด

  • ์นด์ž‰ ๋‹ฌ๋ ฅ์˜ ๊ธฐ์ค€ ์‹œ๊ฐ„์ธ M๊ณผ N์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•ด์ค€๋‹ค. (์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ)
  • ๊ทธ๋ฆฌ๊ณ  i๊ฐ’์„ (x - 1)๊ฐ’์œผ๋กœ ์‹œ์ž‘์ ์„ ์žก๊ณ  ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์ „๊นŒ์ง€ M๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ๋ฐ˜๋ณตํ•œ๋‹ค. ((x - 1)๊ฐ’์„ ์‹œ์ž‘์ ์œผ๋กœ ์žก๋Š” ์ด์œ ๋Š” ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์™€ ์‹œ์ž‘์ ์ด ๊ฐ™์€ ์ˆซ์ž์ผ ๊ฒฝ์šฐ, ๋ฐ˜๋ณต๋ฌธ ์ž์ฒด๊ฐ€ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. => ์˜ˆ๋ฅผ ๋“ค์–ด M, N, x, y ๊ฐ’์ด ๋‹ค ๊ฐ™์„ ๊ฒฝ์šฐ)
  • ๋งŒ์•ฝ i๊ฐ’์„ N์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ, ๋‚˜๋จธ์ง€๊ฐ€ (y - 1)์ด๋ผ๋ฉด (x๊ฐ’์„ -1ํ•ด์คฌ์œผ๋ฏ€๋กœ y๊ฐ’๋„ ๋˜‘๊ฐ™์ด ๋นผ์คŒ) ์นด์ž‰ ๋‹ฌ๋ ฅ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์— i๊ฐ’์— 1์„ ๋”ํ•ด์ค€ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค. (x, y๊ฐ’์— 1์„ ๋นผ์คฌ์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์—๋„ 1์„ ๋”ํ•ด์ค€๋‹ค.)

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ์„ ๊ณ„์† ์ ์–ด๋ณด๋ฉด์„œ ๋’ค๋Šฆ๊ฒŒ ๋ฐœ๊ฒฌํ–ˆ๋‹ค... (์ƒ๋‹นํžˆ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.. ใ…œ)
  • ๊ทธ๋งˆ์ €๋„ ์ฒ˜์Œ์—๋Š” ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์ธ์ค„ ์•Œ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ’€๋‹ค๊ฐ€ ์˜ˆ์ œ๊ฐ€ ์ž˜ ๋งž์ง€ ์•Š์•„ ๋‹ค์‹œ ํ’€์—ˆ๋‹ค... (ใ…œใ…œ)
  • ๊ทธ๋ ‡๊ฒŒ ํ‘ผ ์ฝ”๋“œ๋„ ์ฒ˜์Œ ์ œ์ถœํ–ˆ์„ ๋•Œ๋Š” 'ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค'๊ฐ€ ๋œจ๊ธธ๋ž˜ ๋‹นํ™ฉํ–ˆ๋‹ค.
  • ์˜ˆ์ œ๋Š” ๋‹ค ๋งž์•˜๋Š”๋ฐ ์™œ ํ‹€๋ ธ์ง€ํ•˜๊ณ  ๋ฐ˜๋ก€๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ M, N, x, y๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์ˆซ์ž์ผ ๊ฒฝ์šฐ, ๋ฐ˜๋ณต๋ฌธ์„ ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•ด ๋ฌด์กฐ๊ฑด -1์„ ์ถœ๋ ฅํ•œ๋‹ค๋Š” ๊ฒƒ์ด์˜€๋‹ค. (์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์™€ x, y๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ)
  • ๊ทธ๋ž˜์„œ ๋ฐ˜๋ณต๋ฌธ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก x, y๊ฐ’์— -1์„ ํ•ด์ฃผ์–ด ์˜ˆ์™ธ๊ฐ€ ์—†๋„๋ก ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๊ตฌํ•  ๋•Œ ๋บ€ -1์„ ๋‹ค์‹œ ๋”ํ•ด์ฃผ๋„๋ก ์ˆ˜์ •ํ•˜์˜€๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ’€๋ฆฌ์ง€ ์•Š์•„ ํž˜๋“ค์—ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค....ใ…œใ…œใ…œ

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ6064 {

    static int gcd;

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(br.readLine());

        for(int test = 0; test < T; test++){
            StringTokenizer st = new StringTokenizer(br.readLine());

            // ์—ฐ๋„ ๊ธฐ์ค€
            int M = Integer.parseInt(st.nextToken());
            int N = Integer.parseInt(st.nextToken());

            // ์นด์ž‰ ๋‹ฌ๋ ฅ์œผ๋กœ ๊ตฌํ•  ํ•ด
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            // ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
            gcd = 0;
            // ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ
            GCD(M, N);

            // ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
            int lcm = 0;
            // ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ
            lcm = (M * N)/gcd;

            // ๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅ ๋ณ€์ˆ˜
            // ํ•ด๋‹น๋˜๋Š” ์นด์ž‰ ๋‹ฌ๋ ฅ ๋…„๋„๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ์ถœ๋ ฅํ•ด์•ผ๋˜๋ฏ€๋กœ
            // -1๋กœ ์ดˆ๊ธฐํ™”
            int result = -1;

            // x๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์ „๊นŒ์ง€ ๋ฐ˜๋ณต
            // i๊ฐ’์€ x๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ M๊ฐ’๋งŒํผ ๊ณ„์† ์ฆ๊ฐ€์‹œํ‚ด
            // ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์™€ x, y๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐ˜๋ณต๋ฌธ์„
            // ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ x, y๊ฐ’์— -1์ฒ˜๋ฆฌํ•˜๊ณ  ๋Œ๋ฆผ
            for(int i = (x - 1); i < lcm; i = i + M){
                // i๊ฐ’์„ N์œผ๋กœ ๋‚˜๋ˆด์„๋•Œ, ๋‚˜๋จธ์ง€ ๊ฐ’์ด y๊ฐ’์œผ๋กœ ๋‚˜์˜จ๋‹ค๋ฉด
                if(i % N == (y - 1)){
                    // result๊ฐ’์„ i๋กœ ์ €์žฅํ•˜๊ณ 
                    // ์œ„์—์„œ x, y๊ฐ’์— -1์„ ํ–ˆ์œผ๋ฏ€๋กœ + 1์„ ํ•ด์คŒ
                    // ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
                    result = i + 1;
                    break;
                }
            }

            sb.append(result + "\n");
        }

        System.out.println(sb);
    }

    public static void GCD(int n1, int n2){
        // n1์ด n2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค๋ฉด n2๊ฐ€ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ด๋ฏ€๋กœ
        // ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” n2๊ณ  ํ•จ์ˆ˜ ์ข…๋ฃŒ
        if(n1 % n2 == 0){
            gcd = n2;
            return;
        }

        // ๋งŒ์•ฝ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์ด์šฉํ•ด์„œ
        // n2์™€ n1์„ n2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋กœ
        // ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ๋Œ๋ฆผ
        GCD(n2, n1 % n2);
    }
}