본문 바로가기

알고리즘

[PGS] 최소직사각형 (JAVA)

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

 

프로그래머스

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

programmers.co.kr

최대 최소만 구하면 되는 문제였는데 어렵게 생각해서 조금 꼬아풀었다.

class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        int len = sizes.length;
        int max = 0;
        int max_2 = 0;
        boolean flag = false; //false일 때는 가로에서 제일 큰 수, true일 때는 세로에서 제일 큰 수
        //가로세로 합쳐서 제일 큰 수를 구한다.
        for(int i=0;i<len;i++){
            int[] tmp = sizes[i];
            for(int j=0;j<tmp.length;j++){
                if(max<tmp[j]){
                    max = tmp[j];
                    if(j==1) flag = true;
                }
            }
        }
        //그게 가로라면 tmp[0]<tmp[1]이면서 제일 큰 수보다 작거나 같으면 자리 바꾸기
        if(!flag){
            for(int i=0;i<len;i++){
                int[] tmp = sizes[i];
                if(tmp[0]<tmp[1]&&tmp[1]<=max){
                    sizes[i][1]=tmp[0];
                    sizes[i][0]=tmp[1];
                }
            }
            for(int j=0;j<len;j++){
                if(max_2<sizes[j][1]){
                    max_2 = sizes[j][1];
                }
            }
            System.out.println(max+" "+max_2);
        }
        //그게 세로라면 tmp[0]>tmp[1]이면서 제일 큰 수보다 작거나 같으면 자리 바꾸기
        else if(flag){
            for(int i=0;i<len;i++){
                int[] tmp = sizes[i];
                if(tmp[0]>tmp[1]&&tmp[0]<=max){
                    sizes[i][0]=tmp[1];
                    sizes[i][1]=tmp[0];
                }
            }
            for(int j=0;j<len;j++){
                if(max_2<sizes[j][0]){
                    max_2 = sizes[j][0];
                }
            }
        }
        //끝까지 다 했으면 반대쪽에서 제일 큰 수 구해서 답 구하기

        return max * max_2;
    }
}

이렇게 간단하게 풀 수 있는 문제였는데 ...

class Solution {
    public int solution(int[][] sizes) {
        int length = 0, height = 0;
        for (int[] card : sizes) {
            length = Math.max(length, Math.max(card[0], card[1]));
            height = Math.max(height, Math.min(card[0], card[1]));
        }
        int answer = length * height;
        return answer;
    }
}

 

'알고리즘' 카테고리의 다른 글

[BOJ] 2870번 : 수학숙제 (JAVA)  (0) 2023.01.18
[BOJ] 10808번 : 알파벳 개수(JAVA)  (0) 2023.01.18
BOJ 13460 구슬탈출2 (JAVA)  (2) 2022.04.28
[BOJ] BOJ 14500. 테트로미노 (JAVA)  (0) 2022.04.06
[Kotlin] 소금쟁이  (0) 2022.03.31