728x90
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/86491
📌 문제 개요
여러 개의 명함이 주어질 때,
모든 명함을 수납할 수 있는 가장 작은 지갑 크기를 구하는 문제
명함은 회전 가능하므로, 가로와 세로를 자유롭게 변경할 수 있다.
📌 접근 방법
각 명함마다을 구분하여 방향을 통일했다.
- 긴 변
- 짧은 변
이후 구하면 모든 명함을 포함할 수 있는 최소 지갑 크기가 된다.
- 긴 변들 중 최대값
- 짧은 변들 중 최대값
📌 핵심 아이디어
1. 명함 회전 가능
[30, 70]
// 회전 시
[70, 30]
따라서 모든 명함의 긴 변을 한 방향으로 맞추는 것이 핵심이다.
2. Math.max / Math.min 활용
// 긴 변
Math.max(card[0], card[1])
// 짧은 변
Math.min(card[0], card[1])
정렬 없이도 간단하게 처리 가능하다.
3. 향상된 for문 사용
for (int[] card : sizes)
배열 요소를 직접 순회하여 코드 가독성을 높였다.
📌 전체 코드
class Solution {
public int solution(int[][] sizes) {
int length = 0;
int height = 0;
for (int[] card : sizes) {
// 긴 변
length = Math.max(length,
Math.max(card[0], card[1]));
// 짧은 변
height = Math.max(height,
Math.min(card[0], card[1]));
}
return length * height;
}
}
📄 정리
- 명함 회전 가능 여부가 핵심
- 긴 변 / 짧은 변 방향 통일 필요
- Math.max / Math.min 으로 정렬 없이 해결 가능
- 향상된 for문으로 가독성 개선 가능
- 최대 가로 × 최대 세로 계산 문제
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 프로그래머스 가장 가까운 같은 글자 JAVA 풀이 (해시맵, 문자열) (0) | 2026.05.24 |
|---|---|
| 프로그래머스 3진법 뒤집기 (JAVA) (0) | 2026.05.22 |
| 프로그램머스 이상한 문자 만들기 (JAVA) (0) | 2026.05.21 |
| 프로그래머스 삼총사 JAVA 풀이 (브루트포스, 조합, 시간복잡도) (0) | 2026.05.20 |
| 프로그래머스 최대공약수와 최소공배수 JAVA 풀이 (유클리드호제법, 시간복잡도) (0) | 2026.05.18 |