Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Tags more
Archives
Today
Total
관리 메뉴

luke

[프로그래머스] - 최소직사각형 (자바/Java) 본문

알고리즘문제/프로그래머스(Java)

[프로그래머스] - 최소직사각형 (자바/Java)

luke-king 2024. 5. 30. 16:51

 

 

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


 

class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        int w = 0;
        int h = 0;

        for (int i = 0; i < sizes.length; i++) {
            w = Math.max(w, Math.max(sizes[i][0], sizes[i][1]));
            h = Math.max(h, Math.min(sizes[i][0], sizes[i][1]));
        
        }
        answer = w * h;
        
        return answer;
    }
}

 

오늘 문제는 프로그래머스 " 최소직사각형 " 문제다.

이번 문제는 쉬운 거 같으면서도 접근 방식을 다르게 해야 문제 푸는데 쉽게 풀 수 있던 거 같다...

필자는 문제 이해하는데 좀 시간이 걸려.. 나중에 이해했을때 정말 별거 없는 문제라는 걸 알았다.

왜냐하면 2차원 배열을 통해 각 가로길이 최대값, 세로길이 최대값을 구해 곱해주면 되는 문제이기 때문이다.

(지갑 가로,세로 길이를 회전시킬 수 있기에 회전시켜 각각 최대값을 구하면 된다.)

그럼 바로 문제풀이를 해보겠다.

 

1. 가로,세로 최대값을 담을 변수 w, h를 생성해 준다.

 

2. 반복문을 통해 각 열에 있는 값들을 Math.max 함수를 사용해 가로 최대값을 구해준다.

 

3. 위의 글과 같이 Math.max 함수를 사용해 세로 최대값을 구해준다. 하지만 최대 값인 건  세로 중에 제일 큰 수이기에 Math.min(배열 인덱스) 입력을 해줘야 한다.

 

4. 마지막으로 각 변수들을 곱하면 결과값이 나온다.