본문 바로가기

알고리즘/프로그래머스 문제풀이

프로그래머스 최소 직사각형(lv1, python)

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 분석

  • 주어진 크기의 명함들을 모두 수납할 수 있는 명함지갑의 최소 크기를 구하는 문제
  • 일반적으로 생각하면 명함들의 가로세로 길이의 최대값을 곱해주면 되지만 명함은 회전이 가능하다.

 

아이디어

  • 어차피 카드를 돌린다면 더 큰 쪽을 가로, 짧은 쪽을 세로라고 생각하였다.
  • 두 리스트( maxW, maxH)를 만들어 주어진 명함들의 가로, 세로 중 큰 값을 maxW에 넣고, 작은 값을 maxH에 넣었다.
  • 그리고 각각의 리스트의 최대값을 곱해주면 명함을 전부 넣을 수 있는 최소 명함지갑의 크기가 된다.

 

정답코드

def solution(sizes):
    maxW = []
    maxH = []
    for i in range(len(sizes)):
        if sizes[i][0] >= sizes[i][1]:
            maxW.append(sizes[i][0])
            maxH.append(sizes[i][1])
        else:
            maxW.append(sizes[i][1])
            maxH.append(sizes[i][0])
            
    
    return max(maxW) * max(maxH)