개발일기

백준 2163번 파이썬 풀이 : 초콜릿 자르기 본문

알고리즘 문제풀이/백준

백준 2163번 파이썬 풀이 : 초콜릿 자르기

한민기 2021. 9. 25. 19:07
반응형

문제 링크 : https://www.acmicpc.net/problem/2163

 

2163번: 초콜릿 자르기

정화는 N×M 크기의 초콜릿을 하나 가지고 있다. 초콜릿은 금이 가 있는 모양을 하고 있으며, 그 금에 의해 N×M개의 조각으로 나눠질 수 있다. 초콜릿의 크기가 너무 크다고 생각한 그녀는 초콜릿

www.acmicpc.net

문제

정화는 N×M 크기의 초콜릿을 하나 가지고 있다. 초콜릿은 금이 가 있는 모양을 하고 있으며, 그 금에 의해 N×M개의 조각으로 나눠질 수 있다.

초콜릿의 크기가 너무 크다고 생각한 그녀는 초콜릿을 친구들과 나눠 먹기로 했다. 이를 위해서 정화는 초콜릿을 계속 쪼개서 총 N×M개의 조각으로 쪼개려고 한다. 초콜릿을 쪼갤 때에는 초콜릿 조각을 하나 들고, 적당한 위치에서 초콜릿을 쪼갠다. 초콜릿을 쪼갤 때에는 금이 가 있는 위치에서만 쪼갤 수 있다. 이와 같이 초콜릿을 쪼개면 초콜릿은 두 개의 조각으로 나눠지게 된다. 이제 다시 이 중에서 초콜릿 조각을 하나 들고, 쪼개는 과정을 반복하면 된다.

초콜릿을 쪼개다보면 초콜릿이 녹을 수 있기 때문에, 정화는 가급적이면 초콜릿을 쪼개는 횟수를 최소로 하려 한다. 초콜릿의 크기가 주어졌을 때, 이를 1×1 크기의 초콜릿으로 쪼개기 위한 최소 쪼개기 횟수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 두 정수 N, M(1 ≤ N, M ≤ 300)이 주어진다.

출력

첫째 줄에 답을 출력한다.

 

# 문제 풀이

해당 문제는 초콜릿이 쪼개지는 규칙에 따라 문제를 풀 수 있다.

가로의 개수가 N 개라고 가정을 할 때는 가로로 N-1 번 쪼갰다는 것을 알 수 있다.

 

예를들어 5 * 3의 초콜릿이 있는데 가로로 4번 자르게 되면 1 * 3짜리 5개가 나온다

그 후 여기서 1 * 3 짜리를 각각 2번씩을 짤라야 1 * 1을 얻을 수 있다.

 

따라서 N 과 M이 주어졌을 때 N-1번짜른 후 M-1 번씩 N개의 조각을 자르면 된다.

 

1
2
3
4
5
6
7
def solve(n, m):
    return (n-1+ n * (m-1)
 
 
n, m = map(int, input().split())
print(solve(n, m))
 
cs

 

반응형
Comments