1188번: 음식 평론가
첫째 줄에 소시지의 수 N과 평론가의 수 M이 주어진다. (1 ≤ N, M ≤ 100)
www.acmicpc.net
문제
선영이의 직업은 소시지 요리사이다. 소시지를 팔기 전에 음식 평론가 M명을 모아서 맛을 테스트해보려고 한다.
선영이는 동일한 소시지를 총 N개를 준비했다. 이 소시지를 모든 평론가들이 같은 양을 받게 소시지를 자르려고 한다. 이때, 소시지를 자르는 횟수를 최소로 하려고 한다.
예를 들어, 소시지가 2개, 평론가가 6명있는 경우를 생각해보자. 이때, 각 소시지를 세 조각으로 만든 다음, 각 평론가에게 한 조각씩 주면 된다. 이 경우에 소시지는 총 네 번 자르게 된다. 다른 경우로 소시지가 3개, 평론가가 4명 있는 경우를 생각해보자. 이때는 각 소시지의 크기를 3:1로 잘라서 큰 조각을 평론가에게 하나씩 주고, 남은 조각을 평론가에게 주면 모두 동일한 양을 받게 된다.
소시지의 수와 평론가의 수가 주어졌을 때, 모든 평론가에게 같은 양의 소시지를 주기 위해 필요한 칼질의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 소시지의 수 N과 평론가의 수 M이 주어진다. (1 ≤ N, M ≤ 100)
출력
첫째 줄에 모든 평론가에게 동일한 양을 주기 위해 필요한 칼질 횟수의 최솟값을 출력한다.
코드
n, m = map(int, input().split())
ans = 0
for i in range(n, n*m+1, n):
if i % m != 0:
ans += 1
print(ans)
n개의 소세지를 m명이 동일하게 나눠가져가면 한 사람당 $\frac{n}{m}$개의 소세지를 갖고 가게 된다. 소세지를 $\frac{n}{m}$씩 잘라서 나눠주는데 나눠준 소세지의 양이 정수가 되는 순간, 즉 $\frac{n*m}{m}$인 부분은 이미 소세지가 1개 단위로 나눠져있는 부분이므로 자를 필요가 없다.

위와 같이 소세지 2개, 평론가는 6명이 있다고 할 때 각 평론가는 $\frac{2}{6}$씩 갖고 가게 된다. 하나씩 잘라서 나눠주는데 3명째 나눠주는 때에는 딱 1개의 소세지를 소진한 것이기 때문에 자를 필요가 없다. 실수는 같다고 비교를 할 때 오류가 날까봐 소세지를 n*m개의 조각으로 보고 나눠준 조각이 m으로 나누어 떨어지지 않을 때만 칼질이 필요한 것이므로 이 때만 ans에 1을 더해주었다.
'문제풀이 > 수학' 카테고리의 다른 글
[Python/파이썬] 백준 2436번 공약수 (1) | 2023.12.20 |
---|---|
[Python/파이썬] 백준 1990번 소수인팰린드롬 (0) | 2023.11.24 |
[Python/파이썬] 백준 16971번 배열 B의 값 (0) | 2023.09.21 |
[Python/파이썬] 백준 22943번 수 (0) | 2023.08.30 |
[Python/파이썬] 백준 13908번 비밀번호 (0) | 2023.07.23 |
1188번: 음식 평론가
첫째 줄에 소시지의 수 N과 평론가의 수 M이 주어진다. (1 ≤ N, M ≤ 100)
www.acmicpc.net
문제
선영이의 직업은 소시지 요리사이다. 소시지를 팔기 전에 음식 평론가 M명을 모아서 맛을 테스트해보려고 한다.
선영이는 동일한 소시지를 총 N개를 준비했다. 이 소시지를 모든 평론가들이 같은 양을 받게 소시지를 자르려고 한다. 이때, 소시지를 자르는 횟수를 최소로 하려고 한다.
예를 들어, 소시지가 2개, 평론가가 6명있는 경우를 생각해보자. 이때, 각 소시지를 세 조각으로 만든 다음, 각 평론가에게 한 조각씩 주면 된다. 이 경우에 소시지는 총 네 번 자르게 된다. 다른 경우로 소시지가 3개, 평론가가 4명 있는 경우를 생각해보자. 이때는 각 소시지의 크기를 3:1로 잘라서 큰 조각을 평론가에게 하나씩 주고, 남은 조각을 평론가에게 주면 모두 동일한 양을 받게 된다.
소시지의 수와 평론가의 수가 주어졌을 때, 모든 평론가에게 같은 양의 소시지를 주기 위해 필요한 칼질의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 소시지의 수 N과 평론가의 수 M이 주어진다. (1 ≤ N, M ≤ 100)
출력
첫째 줄에 모든 평론가에게 동일한 양을 주기 위해 필요한 칼질 횟수의 최솟값을 출력한다.
코드
n, m = map(int, input().split()) ans = 0 for i in range(n, n*m+1, n): if i % m != 0: ans += 1 print(ans)
n개의 소세지를 m명이 동일하게 나눠가져가면 한 사람당 $\frac{n}{m}$개의 소세지를 갖고 가게 된다. 소세지를 $\frac{n}{m}$씩 잘라서 나눠주는데 나눠준 소세지의 양이 정수가 되는 순간, 즉 $\frac{n*m}{m}$인 부분은 이미 소세지가 1개 단위로 나눠져있는 부분이므로 자를 필요가 없다.

위와 같이 소세지 2개, 평론가는 6명이 있다고 할 때 각 평론가는 $\frac{2}{6}$씩 갖고 가게 된다. 하나씩 잘라서 나눠주는데 3명째 나눠주는 때에는 딱 1개의 소세지를 소진한 것이기 때문에 자를 필요가 없다. 실수는 같다고 비교를 할 때 오류가 날까봐 소세지를 n*m개의 조각으로 보고 나눠준 조각이 m으로 나누어 떨어지지 않을 때만 칼질이 필요한 것이므로 이 때만 ans에 1을 더해주었다.
'문제풀이 > 수학' 카테고리의 다른 글
[Python/파이썬] 백준 2436번 공약수 (1) | 2023.12.20 |
---|---|
[Python/파이썬] 백준 1990번 소수인팰린드롬 (0) | 2023.11.24 |
[Python/파이썬] 백준 16971번 배열 B의 값 (0) | 2023.09.21 |
[Python/파이썬] 백준 22943번 수 (0) | 2023.08.30 |
[Python/파이썬] 백준 13908번 비밀번호 (0) | 2023.07.23 |