관리 메뉴

오늘도 배운다

최소직사각형 / 프로그래머스, 파이썬 코딩테스트 연습 완전탐색 본문

코딩테스트연습(파이썬)

최소직사각형 / 프로그래머스, 파이썬 코딩테스트 연습 완전탐색

LearnerToRunner 2022. 12. 13. 08:37

문제

명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.

가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.
모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.

아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.

 

 

제출답안

def solution(sizes):
	# 각 사이즈를 max, min 순으로 정렬
    sizes = [[max(size), min(size)] for size in sizes]
    
    # Length, Width의 최대값 구하기
    max_len = max(sizes, key= lambda x: x[0])[0]
    max_wth = max(sizes, key= lambda x: x[1])[1]
    
    answer = max_len * max_wth
    return answer

 

 

제출 후 개선답안

각 사이즈([a, b])에서 큰 값의 가장 큰 값 = 직사각형 중 가장 긴 길이
각 사이즈([a, b])에서 작은 값의 가장 큰 값 =  직사각형 중 가장 긴 너비


def solution(sizes):
    # 큰 값 중 가장 큰 것
    max_max = max(max(size) for size in sizes)
    
    # 큰 값 중 가장 작은 것
    max_min = max(min(size) for size in sizes)

    answer =  max_max * max_min
    return answer

 

 

문제 바로가기

 

728x90
Comments