오늘 풀어본 문제
https://school.programmers.co.kr/learn/courses/30/lessons/86491
명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.
명함 번호 | 가로 길이 | 세로 길이 |
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
'Python' 카테고리의 다른 글
본 캠프 Python 알고리즘 코드카타 11일차 (0) | 2024.07.06 |
---|---|
본 캠프 Python 알고리즘 코드카타 10일차 (0) | 2024.07.06 |
본 캠프 Python 알고리즘 코드카타 8일차 (0) | 2024.07.01 |
본 캠프 Python 알고리즘 코드카타 7일차 (0) | 2024.06.30 |
본 캠프 Python 알고리즘 코드카타 6일차 (0) | 2024.06.29 |