종이 자르기

2024. 9. 28. 18:00코딩테스트 입문

https://school.programmers.co.kr/learn/courses/30/lessons/120922

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.


정수 MN이 매개변수로 주어질 때, 크기의 종이를 최소로 가위질 해야하는 횟수를 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)이 토너먼트의 경기 수라는 것도 알아두시면 될 것 같습니다.

'코딩테스트 입문' 카테고리의 다른 글

다음에 올 숫자  (0) 2024.09.30
연속된 수의 합  (0) 2024.09.29
문자열 밀기  (0) 2024.09.27
잘라서 배열로 저장하기  (1) 2024.09.26
7의 개수  (0) 2024.09.25