본문 바로가기

TIL

[240319] 파이썬: 코드카타 44 & SQL: 코드카타 156~157

[파이썬 코드카타]

최소직사각형

https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

1) 어떤 문제가 있었나

다양한 크기인 모든 명함을 수납할 수 있는 가장 작은 지갑 크기를 반환하는 문제 

 

2) 내가 시도해본 건 무엇인가

① 가로(w)와 세로(h) 중 길이가 긴 것을 기준으로 값을 리스트에 넣고, 

② 길이가 짧은 것을 기준으로 또 다른 리스트에 값을 넣은 뒤, 

③ 각 리스트에서 최대값을 뽑아서 곱해줌

 

3) 어떻게 해결했나

def solution(sizes):
    w_list = []
    h_list = []

    for w, h in sizes:
        if w >= h:
            w_list.append(w)
            h_list.append(h)
        else:
            w_list.append(h)
            h_list.append(w)
    return max(w_list)*max(h_list)

 

4) 무엇을 새롭게 알았나

- size에서 [가로, 세로] 값이 있는 리스트를 뺀 뒤, 최대값 중의 최대값 * 최소값 중에 최대값을 곱해주면 같은 결과가 나옴 

- 경제적인 쿼리를 위해 for문을 한줄로 처리하는 리스트 컴프리헨션(list comprehension)  연습이 필요함 

def solution(sizes):
    return max(max(x) for x in sizes) * max(min(x) for x in sizes)

 

- sizes에서 뽑은 각 가로, 세로 길이를 크기에 따라 재할당(a, b = b, a) 후, 각 인자별 max 값을 반환하도록 설정 

def solution(sizes):
    row = 0
    col = 0
    for a, b in sizes:
        if a < b:
            a, b = b, a
        row = max(row, a)  # if절 끝나고 max값 할당 > for문 다시 돌고 반복
        col = max(col, b)  # if절 끝나고 max값 할당 > for문 다시 돌고 반복
    return row * col