반응형
생각하기 어려운 수학문제였다.
단순히 생각해서 N개의 소세지를 전체 이어붙이고 M개로 만들기 위해선 (M-1)번의 칼질이 필요하다는 것을 알 수 있다. 하지만 N이 M으로 나눠지거나 M이 N으로 나눠지는 경우 생각하지 않아도 되는 칼질의 경우가 생기는 것을 알 수 있다. 이것을 위해 최대공약수로 나누어 답을 구한다면 (M/GCD - 1) 번의 칼질이 나오는데 이것을 다시 GCD로 곱해야지 최종 답을 알 수 있다.
즉, 칼질횟수 = GCD(M/GCD - 1) = M - GCD 임을 알수가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package study4;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_bj_1188_음식평론가 {
static int N,M;
public static void main(String[] args) throws Exception {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N=Integer.parseInt(st.nextToken());
M=Integer.parseInt(st.nextToken());
int GCD= gcd(N,M);
System.out.println(GCD*(M/GCD-1));
}
static int gcd(int a,int b) {
if(b==0)
return a;
return gcd(b,a%b);
}
}
|
반응형
'Algorithm' 카테고리의 다른 글
[BOJ] 2294. 동전 2 (0) | 2020.08.29 |
---|---|
[BOJ] 2343. 기타 레슨 (0) | 2020.08.28 |
[BOJ] 1992. 쿼드트리 (0) | 2020.08.27 |
[Programmers] 블록 게임 (2) | 2020.08.22 |
[Programmers] 길 찾기 게임 (0) | 2020.08.16 |