본문 바로가기

알고리즘/프로그래머스

[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 최소직사각형 (python)

728x90

풀이

def solution(sizes):
    answer = 0
    
    max1 = max(map(max, sizes))
    max2 = max(map(min, sizes))
                
    answer = max1 * max2
    
    return answer

내 풀이

  • 가로 세로를 통틀어 가장 긴 길이(max1)를 구하고, 각 직사각형 안에서 가로 세로 중 작은 것들 중에서 가장 큰 길이(max2)를 구한 뒤 곱해서 답을 구했다.
  • 예를 들어 sizes가 [[60, 50], [30, 70], [60, 30], [80, 40]]로 주어진 경우, 가장 긴 길이는 80이다. (max1 = 80) 이렇게 구한 길이가 명함 지갑의 한 변이 된다.
  • 가로 세로를 통틀어 가장 긴 길이(max1)를 구하고, 각 직사각형 안에서 가로 세로 중 작은 것들 중에서 가장 큰 길이(max2)를 구한 뒤 곱해서 답을 구했다.
  • 명함 지갑의 나머지 한 변은 각 직사각형에서 가로 세로 중 작은 길이들의 최대값을 구하면 되는데(긴건 이미 max1 안에 포함되므로), [60, 50] 직사각형의 경우 둘 중 긴건 60인데 이건 80 안에 들어가므로 50 즉, 둘 중 작은 길이만 고려하면 된다. 따라서 50, 30, 30, 40 중 max를 구하면 50이 max가 되므로 max2=50.
  • answer = max1 * max2

 

map(function, iterable)
  • max1 = max(map(max, sizes)) : 2차원 배열에서 max 요소를 구하는 식이다. 처음에는 반복문 돌면서 구했는데 map을 사용하면 더 간단하게 구할 수 있다고 해서 활용해봤다.
  • 먼저 map(max, sizes)를 통해 각 배열에서 큰 요소를 추출한다. 그리고 여기서 max를 하면 이 중 가장 큰 값을 확인할 수 있다.
  • 예를 들어 sizes가 [[60, 50], [30, 70], [60, 30], [80, 40]] 인 경우 map(max, sizes)를 통해 [60, 70, 60, 80]이 나온다.
반응형