[python_파이썬_pass]프로그래머스_LV1_최소직사각형_풀이

2024. 5. 10. 11:45코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/kdCOczz1e9c?feature=shared

문제 길이만 길지 결국 아래의 사항을 이해하면 된다.

1. 가장 큰 수를 뽑아낸다. (가로, 세로 모두 합쳐서)

2. 가로, 세로를 (x, y)라고 했을때 (큰수, 작은수)로 만들어서 배열해 놓고 작은수들중의 가장 큰 수를 뽑는다.

 

위의 두 조건을 코드로 작성해 보면,

<첫번째 시도 : 실패>

위 2가지 조건을 찾아내지 못한채 그냥 코드만 두들긴 결과이다.

통과되는 문제도 있겠지만 테스트케이스별로 틀린 것도 발생한다.

1번의 가장 큰 수를 뽑아내는데 오류 발생함 1번째 인덱스에 가장 큰 수가 있으면 걸러내지 못함(아래의 배열)

[[14, 7], [12, 3], [10, 7], [8, 15], [5, 15]]
[[15, 8], [10, 7], [14, 7], [15, 5], [12, 3]]
def solution(sizes):
   
    a = sorted(sizes, reverse=True)
    b = sorted(change(sizes), key=lambda x : x[1], reverse=True)
    print(a)
    print(b)
    return a[0][0] * b[0][1]

def change(sizes):
    answer = []
    for i, j in sizes:
        answer.append([max(i, j), min(i, j)])
    return answer

 

<두번째 시도 : 통과>

1, 2번 조건을 만족할 수 있는 코드를 고민하고 작성함.

b가 함수에서 (max, min)을 다시 배열시킨뒤 key조건으로 1번째인덱스 기준으로 내림차순 한 후 인덱싱으로 뽑아냄.

def solution(sizes):
    answer = []
    for x, y in sizes:
        answer.append([max(x, y), min(x, y)])
    a = sorted(answer, reverse=True)
    b = sorted(change(answer), key=lambda x : x[1], reverse=True)
   
    return a[0][0] * b[0][1]

 

<다른사람풀이 검토>

1. 이거 좀.... 와... : max(max(x) for x in sizes) * max(min(x) for x in sizes) : 나랑 생각의 방향은 동일한데 이렇게 뽑아내네..

2. 이거는 좀.... 이해가 어렵네. : solution = lambda sizes: max((sum(sizes, [])) * max(min(size) for size in sizes)

    ㄴ 이 기능 신기하네? sum(sizes, [])를 하면 리스트 내 리스트가 하나로 바뀌네?? 이거 자주 써먹어야 겠다.

728x90
반응형