📘 연습 문제 : 태블릿 거치대 최소 크기
문제 설명
여러 종류의 태블릿을 하나의 거치대에 보관하려고 합니다.
각 태블릿은 가로 길이와 세로 길이가 주어지며,
태블릿은 가로·세로를 회전해서 놓을 수 있습니다.
모든 태블릿을 올려둘 수 있는 거치대의 최소 넓이를 구하세요.
입력
- tablets : 2차원 정수 배열
- tablets[i][0] : i 번째 태블릿의 가로 길이
- tablets[i][1] : i 번째 태블릿의 세로 길이
출력
- 모든 태블릿을 올릴 수 있는 거치대의 최소 넓이
제한 사항
- 1 ≤ tablets.length ≤ 10,000
- 1 ≤ tablets[i][0], tablets[i][1] ≤ 2,000
예시
tablets = [[10, 6], [7, 12], [8, 5]]
설명
- 회전 가능하므로 각 태블릿을 (큰 값, 작은 값) 형태로 통일
- (10,6), (12,7), (8,5)
- 최대 가로 = 12
- 최대 세로 = 7
- 결과 = 12 × 7 = 84
Algorithm
- 태블릿의 가로와 세로 길이는 회전 가능하므로 긴 길이는 가로, 짧은 길이는 세로로 고정한다.
- 각 태블릿의 길이를 순회하며 긴 쪽과 짧은 쪽을 변수에 저장한다.
Code
class Solution {
public int solution(int[][] tablets) {
// 거치대 가로 최댓값
int maxWidth = 0;
// 거치대 세로 최댓값
int maxLength = 0;
// 각 태블릿 순회하며 가로, 세로 최댓값 확인
for (int = 0; i < tablets.length; i++) {
// 태블릿 두 변의 길이 중 긴 쪽
int longer = Math.max(tablets[i][0], tablets[i][1]);
// 태블릿 두 변의 길이 중 짧은 쪽
int shorter = Math.min(tablets[i][0], tablets[i][1]);
// 가로 길이 최댓값 갱신
maxWidth = Math.max(maxWidth, longer);
// 세로 길이 최댓값 갱신
maxHeight = Math.max(maxHeight, shorter);
}
return maxWidth * maxHeight;
}
}
시간 복잡도
- for 문을 활용하여 태블릿의 개수만큼 1번 순회하므로 상수 시간 O(1) 연산
- 따라서 전체 시간 복잡도는 O(N)
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Coding Test > [Java] 완전 탐색' 카테고리의 다른 글
| [프로그래머스 / Java] Lv.2 소수찾기 - 연습 문제 (2) with ChatGPT (0) | 2025.12.23 |
|---|---|
| [프로그래머스 / Java] Lv.2 소수찾기 - 연습 문제 (1) with ChatGPT (0) | 2025.12.22 |
| [프로그래머스 / Java] Lv.1 최소직사각형 - 연습 문제 (1) with ChatGPT (0) | 2025.12.19 |
| [프로그래머스 / Java] Lv.1 모의고사 - 연습 문제 (2) with ChatGPT (0) | 2025.12.16 |
| [프로그래머스 / Java] Lv.1 모의고사 - 연습 문제 (1) with ChatGPT (0) | 2025.12.15 |