종이 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/120922
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 문제
예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.
정수 M, N이 매개변수로 주어질 때,
M x N 크기의 종이를 최소로 가위질 해야하는 횟수를 return 하도록 solution 함수를 완성해보세요.

0 < M, N < 100
종이를 겹쳐서 자를 수 없습니다.
2) 예시
M | N | result |
---|---|---|
2 | 2 | 3 |
2 | 5 | 9 | 1 | 1 | 0 |
입출력 예 #1
본문과 동일합니다.
입출력 예 #2
가로 2 세로 5인 종이는 가로로 1번 세로로 8번 총 가위질 9번이 필요합니다.
입출력 예 #3
이미 1 * 1 크기이므로 0을 return 합니다.
3) 풀이
● 가로 자르는 횟수 구하기
M x N 크기의 종이를 가로 방향으로 잘라서 M개의 조각을 만들려면 M-1 번의 가위질이 필요합니다.
예를 들어, M = 2라면, 한 번의 가위질로 2개의 가로 줄을 만들 수 있습니다.
● 세로 자르는 횟수 구하기
종이를 가로로 잘라서 M개의 조각을 만든 후, 각 조각을 다시 세로로 나누어야 합니다.
세로 방향으로 N개의 조각을 만들려면 N-1 번의 가위질이 필요합니다. 이 과정은 각 가로 조각에 대해 반복되므로 M번 반복해야 합니다. 즉, M개의 가로 줄마다 각각 N-1 번씩의 가위질이 필요하게 됩니다.
따라서 세로로 자르는 총 횟수는 M×(N−1)이 됩니다.
1. 클래스 선언을 해줍니다
● class Solution {
클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 정수 M과 N을 매개변수로 하는 solution 메소드를 선언합니다.
solution은 정수를 반환하므로 데이터타입을 int으로 합니다.
● public int solution(int M, int N) {
3. 가로 자르는 횟수 M-1
세로 자르는 횟수 M * (N-1)
두개를 더한 값을 return 해줍니다.
● return (M - 1) + M * (N - 1);
}
}
4) 코드
class Solution {
public int solution(int M, int N) {
return (M - 1) + M * (N - 1);
}
}
5) 느낀점
가로 자르는 횟수 M-1
세로 자르는 횟수 N-1까지는 생각을 해내었는데,
겹쳐 자르는 것이 안되고, 이미 잘려진 가로를 세로로 잘라내는 것을 M번 반복해야한다는 것을 생각하지 못했습니다.
그래서 왜 자꾸 안되지? 그냥 (M-1) + (N-1)이 끝인 것 같은데.. 라고 생각하다가!
아!
이미 잘린 가로에 의해 그 조각조각을 다시 잘라줘야하는구나 를 깨닫고 M번 반복하는 과정을 추가해서 정답에 도달할 수 있었습니다.
'Programmers Coding Test > Java' 카테고리의 다른 글
[프로그래머스 120869] Java - 코딩테스트 입문 / 외계어 사전 (0) | 2024.08.11 |
---|---|
[프로그래머스 120868] Java - 코딩테스트 입문 / 삼각형의 완성조건 (2) (0) | 2024.07.07 |
[프로그래머스 120885] Java - 코딩테스트 입문 / 이진수 더하기 (0) | 2024.07.07 |
[프로그래머스 120887] Java - 코딩테스트 입문 / k의 개수 (0) | 2024.07.03 |
[프로그래머스 120886] Java - 코딩테스트 입문 / A로 B 만들기 (0) | 2024.06.28 |