※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1188번 문제인 음식 평론가이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/1188 

 

1188번: 음식 평론가

첫째 줄에 소시지의 수 N과 평론가의 수 M이 주어진다. (1 ≤ N, M ≤ 100)

www.acmicpc.net

소시지 N개를 일렬로 죽 늘어놓았다고 생각하자.

 

이 N개의 소시지를 일렬로 늘어놓은 소시지를 겉보기에 M조각이 나게끔 칼질을 (M-1)번 한다면 같은 양의 소시지를 M명의 평론가가 먹을 수 있을 것이다.

 

그러나 칼질을 할 위치가 두 소시지를 이어붙인 곳이었다면 그 위치로는 칼질을 할 필요가 없다. 이러한 위치는 gcd(M,N) - 1곳 존재한다.

 

따라서 (M-1) - (gcd(M,N)-1) = M - gcd(M,N) 이 구하는 답이 된다.

 

위와 같은 방법으로 얻은 칼질횟수가 최소 횟수가 됨을 증명하는 것은 직접 해보자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int gcd(int x, int y) {
	if (y == 0) return x;
	return gcd(y, x % y);
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N, M; cin >> N >> M;
	cout << M - gcd(N, M);
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 16936 // C++] 나3곱2  (1) 2021.11.14
[BOJ 2023 // C++] 신기한 소수  (0) 2021.11.13
[BOJ 10158 // C++] 개미  (0) 2021.11.11
[BOJ 1024 // C++] 수열의 합  (0) 2021.11.10
[BOJ 9934 // C++] 완전 이진 트리  (0) 2021.11.09

+ Recent posts