반응형
이번 문제는 음식 평론가라는 문제이다.
https://www.acmicpc.net/problem/1188
그냥 소시지가 n개 있을 때, m명의 사람에게 나누어주려면 최소한으로 몇번 잘라야 하는가?에 대한 문제이다.
아무래도 종종 빙고게임 판을 그릴 때(표라던가) 몇 번 잘라야 하는 문제가 떠오르긴 했다. (쓸데없는 말)
계속해서 생각을 해보니까
소시지 n개를 따로 생각할 필요 없이 그냥 길이가 n인 소시지를 m등분 한다고 생각하면 좀 편했다.
그러면 한명이 n/m씩 소시지를 가져야 한다.
그럼
n : 3
m : 4
를 예로 들었을 때,
1명이 가져야 하는 양은 3/4이고
등분했을때 까지의 길이를 나타내보면
3/4 지점에서 자르고, 6/4 지점에서 자르고, 9/4에서 자르고 12/4에서 자르고...(길이가 3이니까 12/4에서 끝) 이러면 그렇게 등분 될 것이다.
근데
이미 소시지의 갯수가 n이므로 그건 이미 잘려져 있는 부분이다. 즉 n/m씩 증가하면서 자를때 정수가 되는 부분들은 이미 잘려있으니 건너 뛴다는 뜻이다.
이걸 가분수로 표현하여(실수형 쓰면 복잡할거 같아서)
가분수로 쓰면.. 음.
6 4가 입력되면
6/4 12/4 18/4 24/4
이렇게 자르는데, 12/4는 3으로 정수여서 건너뛰고 24/4도 건너뛰어서 (분자%분모 == 0)
그냥 2가 나오게 된다. 결과값이랑 일치한다.
#include<stdio.h>
int main(void)
{
int n, m;
int i;
int cnt = 0;
scanf("%d %d",&n, &m);
for(i=n; i<n*m; i+=n)
{
if(i%m == 0)
{
continue;
}
else
{
cnt++;
}
}
printf("%d",cnt);
return 0;
}
코드에 적용하면 이리도 간단하다.
반응형