https://school.programmers.co.kr/learn/courses/30/lessons/86491
예시를 통해 알아보자.
1) 최댓값이 가로에 있는 경우
sizes = [[60, 50], [30, 70], [60, 30], [80, 40]]
- 가로와 세로 값을 정리해보면 다음과 같은 상황이다. 이때 최댓값은 가로의 80이며, 가로가 80인 경우를 제외한 나머지 값들의 가로, 세로 값의 크기를 비교하면 다음과 같다.
- 가로가 세로보다 큰 경우는 (30, 70) 인 경우이다. 해당 값들을 서로 교환해준다.
- 교환 후의 모습은 위와 같다. 최종적으로 정답을 구하면, 처음에 구한 최댓값(80)과 세로의 최댓값인 50을 곱한 값이 정답이 된다.
2) 최댓값이 세로에 있는 경우
sizes = [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]]
- 가로와 세로 값을 정리해보면 다음과 같은 상황이다. 이때 최댓값은 세로의 15며, 세로가 15인 경우를 제외한 나머지 값들의 가로, 세로 값의 크기를 비교하면 다음과 같다.
- 나머지 세 개의 (가로, 세로) 쌍이 모두 가로 값이 세로 값보다 크다. 해당 경우들을 서로 값을 교환해준다.
- 교환 후의 모습은 위와 같다. 최종적으로 정답을 구하면, 처음에 구한 최댓값(15)와 가로의 최댓값인 8을 곱한 값이 정답이 된다.
위 풀이를 코드로 구현하면 다음과 같다.
def solution(sizes):
answer = 0
garo = [] # 가로 값들을 모두 저장
saero = [] # 세로 값들을 모두 저장
for i in range(len(sizes)):
garo.append(sizes[i][0])
saero.append(sizes[i][1])
max_length = max(max(garo), max(saero)) # 가로, 세로 통틀어 가장 긴 값을 찾아 max_length에 저장
if max_length in garo: # 최댓값이 가로에 있다면
for i in range(len(garo)): # 최댓값을 제외한 나머지 값들 중, 가로 < 세로인 경우를 찾아 서로 값을 바꿔준다.
if garo[i] < saero[i]:
garo[i], saero[i] = saero[i], garo[i]
answer = max_length * max(saero) # 최댓값(가로)*세로의 최댓값이 최종 정답
elif max_length in saero: # 최댓값이 세로에 있다면
for i in range(len(garo)): # 최댓값을 제외한 나머지 값들 중, 가로 > 세로인 경우를 찾아 서로 값을 바꿔준다.
if garo[i] > saero[i]:
garo[i], saero[i] = saero[i], garo[i]
answer = max_length * max(garo) # 최댓값(세로)*가로의 최댓값이 최종 정답
return answer
채점 결과