정화는 N×M 크기의 초콜릿을 하나 가지고 있다. 초콜릿은 금이 가 있는 모양을 하고 있으며, 그 금에 의해 N×M개의 조각으로 나눠질 수 있다.
초콜릿의 크기가 너무 크다고 생각한 그녀는 초콜릿을 친구들과 나눠 먹기로 했다. 이를 위해서 정화는 초콜릿을 계속 쪼개서 총 N×M개의 조각으로 쪼개려고 한다. 초콜릿을 쪼갤 때에는 초콜릿 조각을 하나 들고, 적당한 위치에서 초콜릿을 쪼갠다. 초콜릿을 쪼갤 때에는 금이 가 있는 위치에서만 쪼갤 수 있다. 이와 같이 초콜릿을 쪼개면 초콜릿은 두 개의 조각으로 나눠지게 된다. 이제 다시 이 중에서 초콜릿 조각을 하나 들고, 쪼개는 과정을 반복하면 된다.
초콜릿을 쪼개다보면 초콜릿이 녹을 수 있기 때문에, 정화는 가급적이면 초콜릿을 쪼개는 횟수를 최소로 하려 한다. 초콜릿의 크기가 주어졌을 때, 이를 1×1 크기의 초콜릿으로 쪼개기 위한 최소 쪼개기 횟수를 구하는 프로그램을 작성하시오.
첫째 줄에 두 정수 N, M(1 ≤ N, M ≤ 300)이 주어진다.
첫째 줄에 답을 출력한다.
2 2
3
1 1
0
처음엔 이게 뭐지... 싶었는데 그림판에 그림을 한번 그려보았다!(정말 대충...)
그림을 그려보니 대에충 감이 살짝 잡혔다!
2x3 사이즈의 초콜릿일 경우 6개의 1x1 사이즈의 초콜릿이 나오는데 한번 내가 직접 잘라본다고 생각해보니 5번
3x3 사이즈의 초콜릿이면 8번 잘라야 1x1 사이즈의 초콜릿 9개가 나오는 이 간단한걸 생각을 못했었다...😓😓
백준 2163번 풀이
N, M = map(int, input().split()) result = (N*M) - 1 print(result)