종이 자르기
2024. 9. 28. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120922
문제 설명
머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.
정수 M, N이 매개변수로 주어질 때, M x N 크기의 종이를 최소로 가위질 해야하는 횟수를 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < M, N < 100
- 종이를 겹쳐서 자를 수 없습니다.
입출력 예
M | N | result |
2 | 2 | 3 |
2 | 5 | 9 |
1 | 1 | 0 |
입출력 예 설명
입출력 예 #1
- 본문과 동일합니다.
입출력 예 #2
- 가로 2 세로 5인 종이는 가로로 1번 세로로 8번 총 가위질 9번이 필요합니다.
입출력 예 #3
- 이미 1 * 1 크기이므로 0을 return 합니다.
M * N 직사각형의 종이를 1 * 1로 만들기 위해서는 몇 번의 가위질이 필요한지 찾는 문제입니다.
제가 어렸을 때 수학도둑을 좋아했었는데, 그 때 봤던 문제랑 이 문제가 같습니다.
그 문제는 초콜릿을 쪼개는 방법에 대한 건데, 어떤 방법으로 쪼개든 항상 최솟값은 초콜릿 가로 * 세로 - 1로 동일합니다.
이 문제도 같은 문제죠. 최소 가위질은 항상 M * N - 1입니다.
파이썬으로 구현해보겠습니다.
def solution(M, N):
return M * N - 1
규칙만 찾는다면 간단하게 문제를 풀 수 있습니다.
이거랑 비슷한 문제가 토너먼트의 경기 수를 구하는 경우인데, (참가자의 수 - 1)이 토너먼트의 경기 수라는 것도 알아두시면 될 것 같습니다.