본문 바로가기
알고리즘/프로그래머스 PS

[프로그래머스][Level 1][Python][위클리 챌린지][8주차] 최소직사각형

by 빛밤하늘 2021. 9. 29.
반응형

밑의 링크는 프로그래머스에서의 문제 링크입니다.

문제와 예제 설명은 링크를 통해서 직접 봐주시길 바랍니다.

 

코딩테스트 연습 - 8주차

[[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

 

 

 

생각한 풀이 과정

처음 매개변수로 주어지는 각 명함들의 가로, 세로 길이에서

더 긴 길이와 짧은 길이들을 서로 양쪽으로 몰아주고

긴 길이들 중에서 최댓값, 짧은 길이들 중에서 최댓값을 곱하면 

모든 명함들을 수납할 수 있는 가장 작은 지갑의 크기를 계산할 수 있다고 생각했습니다.

 

긴 길이들을 명함의 가로 길이로 간주해 새로 명함들의 사이즈를 저장할 리스트 변수를 선언합니다.

long_width_sizes = []

 

처음에 매개변수로 주어진 각 명함들을 반복하면서

가로보다 세로가 더 길다면 명함의 사이즈 리스트에서 가로와 세로 길이의 위치를 바꿔줍니다.

그리고 long_width_sizes에 명함의 사이즈 리스트를 넣어줍니다.

for size in sizes:
    if size[0] < size[1]:
        size[0], size[1] = size[1], size[0]
            
    long_width_sizes.append(size)

 

명함들의 사이즈에서 더 긴 길이들인 가로 길이들을 저장하는 리스트를 선언합니다.

widths = [size[0] for size in long_width_sizes]

 

명함들의 사이즈에서 더 짧은 길이들인 세로 길이들을 저장하는 리스트를 선언합니다.

heights = [size[1] for size in long_width_sizes]

 

가로 길이들 중에서 최댓값과 세로 길이들 중에서 최댓값을 곱해 

모든 명함을 수납할 수 있는 가장 작은 지갑의 크기를 구하고 변수에 저장합니다.

answer = max(widths) * max(heights)

 

 

제출한 파이썬 코드

# 각 명함의 가로 길이, 세로 길이가 들어있는 2차원 리스트 sizes가 매개변수로 주어집니다.
def solution(sizes):
    # 모든 명함을 수납할 수 있는 가장 작은 지갑의 크기를 저장할 변수를 선언합니다.
    answer = 0
    # 각 명함들의 사이즈를 [긴 길이, 짧은 길이] 형태로 저장할 리스트 변수를 선언합니다. 
    long_width_sizes = []

    # sizes에서 각 명함들을 하나씩 반복해봅니다.
    for size in sizes:
        # 이번 명함의 기존 사이즈에서 가로보다 세로 길이가 더 길다면 
        if size[0] < size[1]:
            # 명함의 사이즈를 저장하고 있는 리스트 내부에서 둘의 위치를 바꿔줍니다.
            size[0], size[1] = size[1], size[0]

        # 이번 명함의 사이즈인 리스트를 long_width_sizes에 넣어줍니다.
        long_width_sizes.append(size)

    # 각 명함들에서 가로 길이들을 저장하는 리스트 변수를 선언합니다.
    widths = [size[0] for size in long_width_sizes]
    # 각 명함들에서 세로 길이들을 저장하는 리스트 변수를 선언합니다.
    heights = [size[1] for size in long_width_sizes]
    # 각 명함들에서 가로 길이 중 최대 길이와 세로 길이 중 최대 길이를 곱해
    # 모든 명함을 수납할 수 있는 가장 작은 지갑의 크기를 변수 answer에 저장합니다.
    answer = max(widths) * max(heights)

    # 모든 명함을 수납할 수 있는 가장 작은 지갑의 크기를 저장하고 있는 answer의 값을 반환합니다.
    return answer

 

 

제출 결과

프로그래머스 위클리 챌린지 8주차 최소직사각형에서 코드 제출 결과
프로그래머스 위클리 챌린지 8주차 최소직사각형에서 코드 제출 결과

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

※ 공감 버튼과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍

반응형

댓글