A. 최소직사각형
1-1. 논리 펼치기
1) 가로길이 중 가장 큰 값 구하기
2) 세로길이 중 가장 큰 값과 가로길이의 큰 값 비교하기
3) 가로 길이 내에 세로 길이가 포함된다면 세로로 긴 직사각형 명함을 가로로 눕혀 수납가능하다.
4) 가로 길이 내에 세로 길이가 포함되지 않는다면 가로 최대 길이 * 세로 최대 길이로 명함지갑을 만든다.
1-2. 논리 정리
1) 2차원 배열의 sizes의 각각 값을 가로, 세로 리스트에 새로 넣는다
2) 가로, 세로 중 가장 큰 값 구하기 → 긴 변
3) 가로, 세로 중 가장 작은 값 중 큰 값 구하기 → 짧은 변
4) 긴변 * 짧은 변= 최소 명함 지갑 면적
2. 이차원 배열 sizes
- 매개변수 sizes의 경우 이차원 배열로 구성되어 있다.(문제에서 그렇게 주어짐)
- 2차원 리스트는 가로 x 세로 형태로 이루어져 있으며 행열 모두 0부터 시작한다.
열0 행0 |
열1 | 열2 |
행1 |
- 2차원 리스트 구성 = [ [값,값] , [값,값] , [값.값] ]
3. 코드
1) 내 코드
def solution(sizes):
answer = 0
width=0
height=0
for size in sizes:
w,h = size
width = max(width,w,h)
height = max(height,min(w,h))
answer = width * height
return answer
2) 타인 코드
solution = lambda sizes: max(sum(sizes, [])) * max(min(size) for size in sizes)
- sum(sizes, []) 의 의미는 아래와 같다.
a = [[1, 2], [3, 4], [5, 6]]
sum(a,[]) # [1,2,3,4,5,6]