코딩테스트
[프로그래머스] 최소직사각형 - Lv.1
pyflu
2023. 9. 7. 03:47
[프로그래머스] 최소직사각형 Lv.1 - [파이썬/python]
https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
모든 명함을 수납할 수 있는 가장 작은 지갑의 크기를 반환(return)하는 문제입니다.
※ 제한사항
- sizes의 길이는 1 이상 10,000 이하입니다.
- sizes의 원소는 [w, h] 형식입니다.
- w는 명함의 가로 길이를 나타냅니다.
- h는 명함의 세로 길이를 나타냅니다.
- w와 h는 1 이상 1,000 이하인 자연수입니다.
더보기
이 문제의 핵심 아이디어는 가로 길이와 세로 길이를 최대로 활용하여 명함을 수납할 수 있는 최소 크기의 지갑을 찾는 것입니다.
- 첫번 째로 전체 명함 중에서 가장 큰 최대값을 찾습니다.
- 두번 째로 명함 하나하나의 가로 길이와 세로길이 중 더 작은 값들을 모아 그 중에 가장 큰 최대값을 찾습니다.
- 이 두 값을 곱해 최소 크기의 지갑을 계산합니다. 이렇게 하면 모든 명함을 수납할 수 있는 가장 효율적인 지갑 크기를 얻을 수 있습니다.
정답 주의!!!
def solution(sizes):
max_width = max_height = 0
# 모든 명함의 가로 길이와 세로 길이를 순회합니다.
for size in sizes:
width, height = size
# 현재 명함의 가로 길이와 세로 길이 중에서 최대값을 최대 가로 길이로 갱신합니다.
max_width = max(max_width, width, height)
# 현재 명함의 가로 길이와 세로 길이 중에서 최소값을 최대 세로 길이로 갱신합니다.
max_height = max(max_height, min(width, height))
# 최대 가로 길이와 최대 세로 길이를 곱하여 최소 크기의 지갑을 반환합니다.
return max_width * max_height
728x90