본문 바로가기
Python

본 캠프 Python 알고리즘 코드카타 9일차

by Data 학습자 2024. 7. 2.

오늘 풀어본 문제

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

 

프로그래머스

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

programmers.co.kr

명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.

명함 번호 가로 길이 세로 길이
1 60 50
2 30 70
3 60 30
4 80 40

 

가장 긴 가로 길이가 각각 80, 70 이기 때문에 80(가로) 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50) 입니다.

 

모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.

 

문제 풀이를 할 순서 정하기

 

    1. 각각 가로와 세로의 최대크기를 저장할 저장소를 만들기

def solution(sizes):
    max_w = 0
    max_h = 0

 

    max_w 에 최대 가로 길이 max_h 에 최대 세로 길이를 저장할 저장소가 완성되었다.

 

    2. sizes의 값을 각각 w, h에 넣어 반복하기

    for size in sizes:
        w, h = size

 

    sizes에 있는 요소를 size에 집어넣은 뒤 size에 있는 각 요소들을 w 와 h 에 나눠담는다.

 

    3. w(가로)의 길이보다 h(세로)의 길이가 더 길다면 가로의 길이로 바꿔주기

        if w < h:
            w, h = h, w

 

    w의 값보다 h의 값이 더 크다면 w, h의 값을 서로 반전 시켜라

 

    4.  최대 가로,세로 길이의 값을 저장소에 넣어주기

        if w > max_w:
            max_w = w
        if h > max_h:
            max_h = h

 

    최대 가로의 길이보다 가로의 길이가 더 크다면 최대 가로길이의 값은 가로의 값과 같아진다.

    최대 세로의 길이보다 세로의 길이가 더 크다면 최대 세로길이의 값은 세로의 값과 같아진다.

 

    5. 최대 가로 길이와 세로길이의 크기를 출력하기

    answer = max_w * max_h
    return answer

 

   최대 가로 길이와 최대 세로 길이를 곱해 지갑의 크기를 구한 뒤 그 크기를 출력해 내었다.

 

최종 코드문

 

def solution(sizes):
    max_w = 0
    max_h = 0
    
    for size in sizes:
        w, h = size
        if w < h:
            w, h = h, w
        
        if w > max_w:
            max_w = w
        if h > max_h:
            max_h = h
    
    answer = max_w * max_h
    return answer