https://school.programmers.co.kr/learn/courses/30/lessons/86491
이 문제의 답이 나오는 과정은 간단하다.
1. 가로, 세로길이를 내림차순으로 정렬한다. (즉, 모든 명함이 가로길이 < 세로길이가 되도록)
2. 각 명함의 가로길이의 최댓값, 세로길이의 최댓값을 각각 곱해준다.
이를 코드로써 구현해주면 된다. 필자는 아래와 같이 무식한 방법으로 구현했다.
def solution(sizes):
width = 0
height = 0
for i in range(len(sizes)):
if sizes[i][0] < sizes[i][1]:
sizes[i][0], sizes[i][1] = sizes[i][1], sizes[i][0]
for i in range(len(sizes)):
if sizes[i][0] > width:
width = sizes[i][0]
for i in range(len(sizes)):
if sizes[i][1] > height:
height = sizes[i][1]
answer = width * height
return answer
하지만 아무리 생각해도 좀 더 좋은 풀이가 있을 것이라 생각해 다른 사람들의 풀이를 참고해봤다.
그 중 가장 파이썬스럽고, 현실적으로 시험장에서 떠올릴 수 있을 만한 답안을 찾았다.
def solution(sizes):
row = 0
col = 0
for a, b in sizes:
if a < b:
a, b = b, a
row = max(row, a)
col = max(col, b)
return row * col
반복문의 인자를 위와 같이 받아줌으로써 2차원 리스트의 원소값을 나타내었다. 이렇게 하면 번거롭게 반복문을 3번씩이나 쓸 필요가 없다!
'Algorithm > 코딩테스트 고득점 Kit' 카테고리의 다른 글
[고득점 Kit / 완전탐색] 카펫 (1) | 2024.09.15 |
---|---|
[고득점 Kit / 완전탐색] 소수찾기 (0) | 2024.09.15 |
[고득점 Kit / 완전탐색] 모의고사 (0) | 2024.09.11 |
[고득점 Kit / 정렬] H-Index (0) | 2024.09.11 |
[고득점 Kit / 정렬] 가장 큰 수 (0) | 2024.09.09 |