01-31 06:56
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
관리 메뉴

기록을 합시다.

[프로그래머스] 최소 직사각형(python/java) 본문

공부/알고리즘

[프로그래머스] 최소 직사각형(python/java)

울집고양이세마리 2023. 6. 11. 15:34

문제 요약

  • 모든 명함을 담을 수 있는 명함 케이스의 크기를 구하라
  • 명함의 크기는 가로, 세로로 회전해서 넣을 수 있으므로 이 점 고려해야함

내가 생각한 로직

  • 모든 명함의 가로, 세로를 크기 순으로 정렬한다. (ex. [30,70] => [70,30])
  • 크기순으로 정렬한 명함들 안에서 첫 번째 요소의 max값과 두 번째 요소의 max값을 구한다.

파이썬으로 제출한 정답

def solution(sizes):

    sorted_sizes = []

    max_width = -1
    max_height = -1

    for size in sizes :
        n, m = size 

        if n >= m:
            sorted_sizes.append(size)

        else:
            sorted_sizes.append([m, n])

    for size in sorted_sizes:
        n, m = size 

        if max_width < n:
            max_width = n

        if max_height < m :
            max_height = m

    answer = max_width * max_height 

    return answer

자바로 제출한 정답

class Solution {
    public int solution(int[][] sizes) {
        int maxWidth = 0;
        int maxHeight = 0; 

        for(int[] size : sizes){
            int tmpA = size[0];
            int tmpB = size[1];

            //명함의 가로가 세로보다 길 때
            if(tmpA >= tmpB){
                //최대값보다 클 때
                if(tmpA > maxWidth){
                    maxWidth = tmpA;
                }
                //최대값보다 클 때 
                if(tmpB > maxHeight){
                    maxHeight = tmpB;
                }
            }else{
                if(tmpA > maxHeight){
                    maxHeight = tmpA;
                }
                if(tmpB > maxWidth){
                    maxWidth = tmpB;
                }
            }
        }

        int answer = maxWidth*maxHeight;

        return answer;
    }
}
Comments