Lv. 1 이라고 풀이가 바로 떠오를 줄 알았는데, 30분 정도 고민을 했다.
처음에 생각의 방향을 잘못 잡아서 이상한 포인트에서 헤맸다.
[[60, 50], [30, 70], [60, 30], [80, 40]]
요런 명함 input 값이 주어졌을 때,
1. 세로 사이즈가 가장 큰 명함을 하나씩 회전시켜간다(더 이상 회전 시킬 명함이 없을 때까지)
2. 그 때의 (최대 가로사이즈 * 최대 세로사이즈) 값이 문제에서 요구하는 지갑 크기의 최솟값이다.
여기에서 1번을 너무 어렵게 생각한게 문제 풀이의 장애물이었다. 그냥 명함을 하나씩 순회하면서 큰 수는 "가로 크기"로 취급, 작은 수는 "세로 크기"로 취급하여 새로운 배열을 만든 뒤에 각 배열의 최댓값을 서로 곱하면 답인것인데 매번 최대 세로 크기를 찾아내서 회전시키고.. 이럴 생각을 해서 생각이 막힌 것이다.
미리 전부 회전시켜 놓은 상태로 간주를 해버리면 문제는 아주 쉽게 풀린다.
def solution(sizes):
largers = [] # 큰 수를 모아 놓을 배열
smallers = [] # 작은 수를 모아 놓을 배열
for width, height in sizes:
larger = max(width, height)
smaller = min(width, height)
largers.append(larger)
smallers.append(smaller)
return max(largers) * max(smallers)