반응형
밑의 링크는 프로그래머스에서의 문제 링크입니다.
문제와 예제 설명은 링크를 통해서 직접 봐주시길 바랍니다.
생각한 풀이 과정
처음 매개변수로 주어지는 각 명함들의 가로, 세로 길이에서
더 긴 길이와 짧은 길이들을 서로 양쪽으로 몰아주고
긴 길이들 중에서 최댓값, 짧은 길이들 중에서 최댓값을 곱하면
모든 명함들을 수납할 수 있는 가장 작은 지갑의 크기를 계산할 수 있다고 생각했습니다.
긴 길이들을 명함의 가로 길이로 간주해 새로 명함들의 사이즈를 저장할 리스트 변수를 선언합니다.
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
제출 결과
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
※ 공감 버튼❤과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍
반응형
댓글