코딩테스트

[프로그래머스] 최소직사각형 - 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