μκ³ λ¦¬μ¦
[Java] BOJ 6064 μΉ΄μ λ¬λ ₯
πκ·€π
2024. 8. 25. 18:46
λ¬Έμ
λ¬Έμ λ§ν¬ 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);
}
}