https://programmers.co.kr/learn/courses/30/lessons/86491
def solution(sizes):
max_width = 0
max_height = 0
for card in sizes:
# 큰 값을 한쪽으로 몰아 넣는 과정
if card[0] < card[1]:
card.reverse()
# 큰 값을 갱신하는 부분
max_width = max(max_width, card[0])
max_height = max(max_height, card[1])
# 큰 값 두개를 곱하면 가장 작은 지갑의 크기가 된다
answer = max_width * max_height
return answer
# 큰 값을 한쪽으로 몰아서 max를 구하는 것이 포인트
문제 해결 Point
해당 문제의 가장 중요한 포인트는 언제 명함을 돌려서 보관하는 것이 좋은가에 대한 해법이다.
가장 간단한 방법은, 가로와 세로길이를 비교해 큰 값을 한쪽으로 몰아 두는 방법이다.
원래의 명함
명함 번호 | 가로 길이 | 세로 길이 |
1 | 60 | 50 |
2 | 30 | 70 |
3 | 60 | 30 |
4 | 80 | 40 |
돌리고 난 후의 명함
명함 번호 | 가로 길이 | 세로 길이 |
1 | 60 | 50 |
2 | 70 | 30 |
3 | 60 | 30 |
4 | 80 | 40 |
위처럼 큰 값을 한쪽으로 몰아넣고 난 후에 각 카드에서 가장 큰 값끼리 곱하면 가장 작은 지갑의 크기를 구할 수 있다.
728x90
'SW개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스]큰 수 만들기 - 그리디 (0) | 2021.10.16 |
---|---|
[프로그래머스]입국심사 - 이분탐색 (0) | 2021.10.11 |
[프로그래머스]카펫 - 완전탐색 (0) | 2021.10.11 |
[프로그래머스]소수 찾기 - 완전탐색 (0) | 2021.10.11 |
[프로그래머스]모의고사 - 완전탐색 (0) | 2021.10.11 |