[프로그래머스 120922] Java - 코딩테스트 입문 / 종이 자르기

 

종이 자르기

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

1)  문제

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

정수 M, N이 매개변수로 주어질 때, 
M x N 크기의 종이를 최소로 가위질 해야하는 횟수를 return 하도록 solution 함수를 완성해보세요.

제한사항
0 < M, N < 100
종이를 겹쳐서 자를 수 없습니다.

 

 

 

2)  예시

 

 

Result Table
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번 반복하는 과정을 추가해서 정답에 도달할 수 있었습니다.