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]

 

+ Recent posts