728x90
๐ ๏ธ ๋ฌธ์ ๐ ๏ธ
๐๏ธ ์ค๋ช ๐๏ธ
์ค๊ตญ์ธ์ ๋๋จธ์ง ์ ๋ฆฌ ์ฐธ๊ณ ๋ธ๋ก๊ทธ
https://blog.joonas.io/23
๋๋จธ์ง ์ฐ์ฐ์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ์ง๋ง ์ด๋ ค์์ ๊ตฌํ ์คํจ
๊ทธ๋์ ๋ฌธ์ ํ์ด ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋๋ฐ ์ฌ๊ธฐ์ ๋ด๊ฐ ์ดํดํ ๋ถ๋ถ์ ์ ๋ฆฌํ๊ธฐ ์ํด ๊ธ์ ์์ฑ
๋ฌธ์ ํ์ด ์ฐธ๊ณ ๋ธ๋ก๊ทธ
https://girawhale.tistory.com/10
1. ํ์ฌ ์กฐ๊ฑด์์ ๊ตฌํ ์ ์๋ ๋ง์ง๋ง ํด
์๋ฅผ ๋ค์ด, M = 10 ์ด๊ณ N = 12๋ผ๊ณ ํ์. ์ฒซ ๋ฒ์งธ ํด๋ <1:1>๋ก ํํ๋๊ณ , 11๋ฒ์งธ ํด๋ <1:11>๋ก ํํ๋๋ค. <3:1>์ 13๋ฒ์งธ ํด๋ฅผ ๋ํ๋ด๊ณ , <10:12>๋ ๋ง์ง๋ง์ธ 60๋ฒ์งธ ํด๋ฅผ ๋ํ๋ธ๋ค.
์์ ๊ฐ์ด ๋ฌธ์ ์์์์ ๋ณผ ์ ์๋ฏ์ด ๋ง์ง๋ง ํด๋ M๊ณผ N์ ์ต์๊ณต๋ฐฐ์์ด๋ค.
์ฆ, ๋ง์ง๋ง ํด๋ฅผ ๋๊ธฐ๊ธฐ ์ ๊น์ง ํด๋ฅผ ๊ตฌํ ์ ์์ผ๋ฉด ๋ต ์ถ๋ ฅ / ๋ชป ๊ตฌํ๋ฉด -1 ์ถ๋ ฅ
2. ํํ์ ์ ๋ฆฌ
x < M ์ด๋ฉด x' = x + 1์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด x' = 1์ด๋ค. ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ง์ผ y < N์ด๋ฉด y' = y + 1์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด y' = 1
x๊ฐ M๋ณด๋ค ์์ผ๋ฉด 1์ฉ ์ฆ๊ฐํ๋ค๊ฐ M๋ณด๋ค ํฐ ์๊ฐ ๋๋ฉด x๋ ๋ค์ 1๋ก ๋์๊ฐ๋ค. y๋ x์ ๊ฐ๋ค.
์ด๋ ์ฐ๋ฆฌ๊ฐ ๋๋์ ์ ํ๊ณ ๊ตฌํ ๋๋จธ์ง๊ฐ ์ด์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค.
a / b = c ... d
์ด๋ฅผ ๋ง๋ก ํํํ๋ฉด a ๋๋๊ธฐ b์ ๋ชซ์ c ์ด๊ณ ๋๋จธ์ง๋ d ์ด๋ค.
ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ผ๋ก ํํํด ๋ณด๋ฉด
a / M = c ... x ---โ
a' / N = c' ... y ---โก
์ด๋, ์ค์ํ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ ๊ฐ์ a ์a' ์ธ๋ฐ a = a' ์ธ ๊ฒ์ ๊ตฌํด์ผํ๋ค. (์ง๊ธ๋ถํฐ๋ result๋ก ํํํ๋ค.)
โ result = M * c + x
โก result = N * c' + y
์ฆ, M * c + x = N * c' + y ์ด๋ค.
3. ์ฝ๋์ ์ฌ์ฉ
int last = lcm(M, N); //๊ฐ์ฅ ๋ง์ง๋ง ์ฐ๋ - ์ต์ ๊ณต๋ฐฐ์๋ก ๊ตฌํ๋ค.
int n = 0; // M์ ๋ชซ
int result = -1; //๊ตฌํด์ผ ํ ๊ฐ
while(n * M < last){
if((n * M + x - y) % N == 0) {
result = n * M + x;
break;
}
n++;
}
//๊ฒฐ๊ณผ ์ ์ฅ
sb.append(result).append("\n");
- result๋ฅผ -1๋ก ์ด๊ธฐํํ ์ด์
- while๋ฌธ ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๊ณ ๋๋๋ฉด <x:y> ๊ฐ ์ ํจํ์ง ์๋ค๋ ์๋ฏธ
- n * M < last
- ํ์ฌ ์กฐ๊ฑด์์ ๊ตฌํ ์ ์๋ ๋ง์ง๋ง ํด(์์ ์ค๋ช ์ฐธ๊ณ )
- ๋ฌธ์ ์กฐ๊ฑด : 1 ≤ x ≤ M ์ด๋ค.
- ์ฆ, last๋ณด๋ค ๋ฌด์กฐ๊ฑด ์์ ์ด์ ๋ n * M + x ์ด๋ฏ๋ก n * M ์ last ๊ฐ์ ์ ์๋ค.
- n * M + x - y
- M * n + x = N * c' + y (์์ ์ ์ ๋ฆฌ ์ฐธ๊ณ ) ----(1)
- N * c' = M * n + x - y
- (M * n + x - y) % N == 0 ์ด๋ผ๋ฉด (1)์ ์ฑ๋ฆฝํ๋ค๋ ์๋ฏธ
๐ ํ์ด ์ฝ๋ ๐
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ6064 {
//์ต๋๊ณต์ฝ์
public static int gcd(int num1, int num2){
int tmp = 0;
while(num2 > 0){
tmp = num1 % num2;
num1 = num2;
num2 = tmp;
}
return num1;
}
//์ต์๊ณต๋ฐฐ์
public static int lcm(int num1, int num2){
return num1 * num2 / gcd(num1, num2);
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int testcase = Integer.parseInt(bf.readLine());
StringBuilder sb = new StringBuilder();
StringTokenizer st;
for(int i = 0; i < testcase; i++){
st = new StringTokenizer(bf.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());
int last = lcm(M, N); //๊ฐ์ฅ ๋ง์ง๋ง ์ฐ๋
int n = 0;
int result = -1;
while(n * M < last){
if((n * M + x - y) % N == 0) {
result = n * M + x;
break;
}
n++;
}
sb.append(result).append("\n");
}
System.out.println(sb);
}
}
728x90
'ProgramSolve > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15657๋ฒ - N๊ณผM(8) (Python) (1) | 2023.10.05 |
---|---|
[BOJ] 1911๋ฒ - ํ๊ธธ ๋ณด์ํ๊ธฐ (Python) (0) | 2023.09.07 |
[BOJ] 13549๋ฒ - ์จ๋ฐ๊ผญ์ง3 (Python) (0) | 2023.09.05 |
[BOJ] 1753๋ฒ - ์ต๋จ๊ฒฝ๋ก(Python) + Dijkstra Algorithm (0) | 2023.09.04 |
[BOJ] 2667๋ฒ - ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ(JAVA) (0) | 2023.03.23 |