https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
최소 직사각형 이라는 문제 Java로 풀이하겠습니다.

주어진 명함의 가로 길이와 세로 길이를 기반으로 가장 작은 지갑의 크기를 계산하는 문제입니다.
다음과 같이 문제 풀이하였습니다.
import java.util.Queue;
import java.util.PriorityQueue;
class Solution {
public int solution(int[][] sizes) {
Queue<Integer> width = new PriorityQueue<>((o1,o2)->{
return o2 - o1;
});
Queue<Integer> height = new PriorityQueue<>((o1,o2)->{
return o2 - o1;
});
for(int i=0; i<sizes.length; i++) {
int num1 = sizes[i][0];
int num2 = sizes[i][1];
if(num1<num2) {
width.add(num2);
height.add(num1);
}else {
width.add(num1);
height.add(num2);
}
}
return width.peek()*height.peek();
}
}
저는 Queue라는 자료구조를 사용하여 문제를 풀이하였습니다.
PriorityQueue는 기본적으로 오름차순으로 요소를 정렬합니다. 그러나 람다식을 사용하여 정렬 방법을 설정할 수도 있습니다.
- o1 - o2 를 반환하면 o1이 o2 보다 큰 경우에는 양수가 반환되어 내림차순으로 정렬
- o2 - o1 을 반환하면 o1이 o2 보다 큰 경우에는 음수가 반환되어 오름차순으로 정렬
따라서 위에서 제가 작성한 코드에서는 내림차순으로 요소를 정렬하도록 설정되어있습니다.
- width 와 height라는 각각의 우선순위 큐를 사용하여 가로와 세로 길이를 저장할 수 있는 변수를 선언합니다.
- 입력된 sizes를 순회하면서 사각형의 두변중 긴 변을 width에 작은 변을 height에 넣습니다.
- 이후 두 우선 순위 큐의 가장 위의 원소를 peek()을 사용하여 꺼내와서 서로 곱하여 지갑의 최소 크기를 구합니다.
다른 이견이 있다면 댓글로 자유롭게 남겨주세요.

'Algorithm > CodingTest' 카테고리의 다른 글
| [Programmers] Level.1 삼총사(Java) (0) | 2023.10.24 |
|---|---|
| [Programmers] Level.1 가운데 글자 가져오기(Java) (0) | 2023.10.22 |
| [Programmers] Level.1 없는 숫자 더하기(Java) (0) | 2023.10.21 |
| [Programmers] Level.1 2016년(Java) (0) | 2023.10.19 |
| [Programmers] Level.1 크기가 작은 부분 문자열(Java) (2) | 2023.10.19 |