코딩테스트

[프로그래머스]최소직사각형

SigmoidFunction 2021. 12. 5. 00:21
728x90

문제링크 : https://programmers.co.kr/learn/courses/30/lessons/86491

 

코딩테스트 연습 - 최소직사각형

[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

programmers.co.kr

 

 

 

 

문제는 이해하기 쉬웠다.

 

그래서 한 명함의 크기를 가로를 크게, 세로를 작게 소팅하여 정리해준다음에 가로에서 최대값과 세로에서 최대값을 구하면 될 것이라고 생각해서 코드를 짰다.

 

def solution(sizes):
    resizes = []
    for i in range(len(sizes)):
        resizes.append(sorted(sizes[i], reverse=True))
    a = resizes[0][0]
    b = resizes[0][1]
    for i in resizes:
        if i[0] > a:
            a = i[0]
            if i[1] > b:
                b = i[1]
        elif i[1] > b:
            b = i[1]
    
    return a*b

문제는 해결하긴 했지만 꽤나 내용이 길고 복잡하게 보이는 부분이 있어서 아쉬움이 남았다

 

그래서 다른 사람들의 풀이를 보았다.

 

 

1번 풀이

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

min, max를 정말 잘 활용한 코드인 듯하다...이런 방법이 있다니 반성반성

 

2번 풀이

solution = lambda sizes: max(sum(sizes, [])) * max(min(size) for size in sizes)

함수로 나타내진 않았지만 lambda함수를 잘 활용한 모습이 인상적이었다. 

 

내가 lambda와 map에 약한데 이부분에 대해서 좀더 공부하게 된 계기가 되었다.

728x90