알고리즘/프로그래머스 Level1

[프로그래머스,자바] Level1: 최소직사각형 (위클리 8주차)

류창 2021. 10. 3. 20:50

문제분석

목표: 모든 명함을 넣을수있는 가장 작은 지갑 만들기

 

특수규칙: 명함은 회전할수있다.

 

전 이 문제를.. Set과 3차 반복문으로 40줄넘겨가면서 삽질하면서 풀었습니다...

가로와 세로에대한 틀에 너무 집중하시면 자칫하다 개고생합니다(하드모드).

 

가로:  두 변중에서 긴 부분

세로:  두 변중에서 작은 부분

이렇게 생각하시면 놀랍게도 정말 쉽게 풀리는 문제입니다.

 

그림으로 보실까요?

가로를 두 변중에서 가장 긴 부분으로 설정합니다. (모든 명함을 제일 긴부분으로 눕히는거죠)

세로를 두 변중에서 가장 작은 부분으로 설정합니다.

 

그후, 가로와 세로의 길이가 모두 들어맞게, Max(가로)와 Max(세로)를 설정하면 정말 쉽게풀립니다.

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        int max_v=0;
        int max_h=0;
        for(int i=0;i<sizes.length;i++){
            int v=Math.max(sizes[i][0],sizes[i][1]);
            int h=Math.min(sizes[i][0],sizes[i][1]);
            max_v=Math.max(max_v,v);
            max_h=Math.max(max_h,h);
        }
        return answer=max_v*max_h;
    }
}
cs

 

이번문제는 사고력문제라고 생각합니다.

문제 접근을 잘한다면 10분안에 풀겠지만, 잘못하면 1시간만에 풀어버릴수가있습니다.