
문제
https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어짐
모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 반환 - 제한사항)
sizes의 길이는 1 이상 10,000 이하
sizes의 원소는 [w, h] 형식
w는 명함의 가로 길이, h는 명함의 세로 길이
w와 h는 1 이상 1,000 이하인 자연수
명함은 회전이 가능하므로, 각 명함마다 가로와 세로를 자유롭게 바꿀 수 있음
→ 명함의 두 변 중 더 긴 변은 항상 가로(w), 짧은 변은 세로(h)로 정렬
예를 들어, [30, 70]은 [70, 30]으로 바꾸어 [w, h] = [70, 30]으로 만들기
정답 코드
def solution(sizes):
max_w = 0
max_h = 0
for w, h in sizes:
w, h = max(w, h), min(w, h)
max_w = max(max_w, w)
max_h = max(max_h, h)
return max_w * max_h
코드 설명
def solution(sizes):
- sizes: 명함의 가로와 세로가 담긴 리스트
예: [[60, 50], [30, 70], [60, 30], [80, 40]]
max_w = 0
max_h = 0
- 지갑의 최대 가로길이와 최대 세로길이를 저장할 변수
- 초기값은 0으로 시작
for w, h in sizes:
- 명함 리스트에서 각 명함의 가로(w), 세로(h)를 하나씩 꺼내기
w, h = max(w, h), min(w, h)
- 명함은 회전이 가능하므로, 가로와 세로 중 큰 쪽을 항상 가로(w)로 보기
- 즉, 명함을 돌려서라도 항상 큰 쪽이 가로, 작은 쪽이 세로가 되게 하기
예: [30, 70] → 회전 → w=70, h=30
max_w = max(max_w, w)
max_h = max(max_h, h)
- 현재 명함의 가로/세로와 이전까지의 최대값을 비교해서 갱신
return max_w * max_h
- 최종적으로 지갑의 크기(넓이)를 계산해서 반환
'코딩 테스트 연습 > [프로그래머스] Python' 카테고리의 다른 글
| [LV.3] 숫자 문자열과 영단어 ⭐ (0) | 2025.07.07 |
|---|---|
| [LV.3] 연습문제 > 시저 암호 (0) | 2025.07.04 |
| [LV.3] 연습문제 > 크기가 작은 부분문자열 (1) | 2025.07.02 |
| [LV.3] 연습문제 > 삼총사 ⭐️ (1) | 2025.07.01 |
| [LV.3] 연습문제 > 이상한 문자 만들기 ⭐ (0) | 2025.06.30 |