Skip to content

Commit 35c8fcb

Browse files
committed
[level 1] Title: 최소직사각형, Time: 3.37 ms, Memory: 94.7 MB -BaekjoonHub
1 parent b6e6ab4 commit 35c8fcb

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# [level 1] 최소직사각형 - 86491
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/86491)
4+
5+
### 성능 요약
6+
7+
메모리: 94.7 MB, 시간: 3.37 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 완전탐색
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 02월 15일 15:41:41
20+
21+
### 문제 설명
22+
23+
<p>명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.</p>
24+
25+
<p>아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.</p>
26+
<table class="table">
27+
<thead><tr>
28+
<th>명함 번호</th>
29+
<th>가로 길이</th>
30+
<th>세로 길이</th>
31+
</tr>
32+
</thead>
33+
<tbody><tr>
34+
<td>1</td>
35+
<td>60</td>
36+
<td>50</td>
37+
</tr>
38+
<tr>
39+
<td>2</td>
40+
<td>30</td>
41+
<td>70</td>
42+
</tr>
43+
<tr>
44+
<td>3</td>
45+
<td>60</td>
46+
<td>30</td>
47+
</tr>
48+
<tr>
49+
<td>4</td>
50+
<td>80</td>
51+
<td>40</td>
52+
</tr>
53+
</tbody>
54+
</table>
55+
<p>가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.</p>
56+
57+
<p>모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.</p>
58+
59+
<hr>
60+
61+
<h5>제한사항</h5>
62+
63+
<ul>
64+
<li>sizes의 길이는 1 이상 10,000 이하입니다.
65+
66+
<ul>
67+
<li>sizes의 원소는 [w, h] 형식입니다.</li>
68+
<li>w는 명함의 가로 길이를 나타냅니다.</li>
69+
<li>h는 명함의 세로 길이를 나타냅니다.</li>
70+
<li>w와 h는 1 이상 1,000 이하인 자연수입니다.</li>
71+
</ul></li>
72+
</ul>
73+
74+
<hr>
75+
76+
<h5>입출력 예</h5>
77+
<table class="table">
78+
<thead><tr>
79+
<th>sizes</th>
80+
<th>result</th>
81+
</tr>
82+
</thead>
83+
<tbody><tr>
84+
<td>[[60, 50], [30, 70], [60, 30], [80, 40]]</td>
85+
<td>4000</td>
86+
</tr>
87+
<tr>
88+
<td>[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]]</td>
89+
<td>120</td>
90+
</tr>
91+
<tr>
92+
<td>[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]]</td>
93+
<td>133</td>
94+
</tr>
95+
</tbody>
96+
</table>
97+
<hr>
98+
99+
<h5>입출력 예 설명</h5>
100+
101+
<p>입출력 예 #1<br>
102+
문제 예시와 같습니다.</p>
103+
104+
<p>입출력 예 #2<br>
105+
명함들을 적절히 회전시켜 겹쳤을 때, 3번째 명함(가로: 8, 세로: 15)이 다른 모든 명함보다 크기가 큽니다. 따라서 지갑의 크기는 3번째 명함의 크기와 같으며, 120(=8 x 15)을 return 합니다.</p>
106+
107+
<p>입출력 예 #3<br>
108+
명함들을 적절히 회전시켜 겹쳤을 때, 모든 명함을 포함하는 가장 작은 지갑의 크기는 133(=19 x 7)입니다.</p>
109+
110+
111+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import java.util.Arrays;
2+
3+
class Solution {
4+
public int solution(int[][] sizes) {
5+
int maxHeight = 0;
6+
int maxWidth = 0;
7+
8+
for (int[] size : sizes) {
9+
Arrays.sort(size);
10+
}
11+
12+
for (int i = 0; i < sizes.length; i++) {
13+
if (sizes[i][0] > maxHeight) {
14+
maxHeight = sizes[i][0];
15+
}
16+
17+
if (sizes[i][1] > maxWidth) {
18+
maxWidth = sizes[i][1];
19+
}
20+
}
21+
22+
return maxHeight * maxWidth;
23+
}
24+
}

0 commit comments

Comments
 (0)