https://school.programmers.co.kr/learn/courses/30/lessons/86491
우선 가로 세로 중에 제일 큰 수를 구한다.
가로가 제일 클 경우, 명함들 중 가로보다 세로가 큰 경우를 찾아서 가로 -> 세로, 세로 -> 가로 스왑해준다.
세로가 제일 클 경우, 명함들 중 세로보다 가로가 큰 경우를 찾아서 세로 -> 가로, 가로 -> 세로 스왑해준다.
그 후, 스왑해준 세로(가로) 중에 제일 큰 수를 구한다음,
처음 구했던 제일 큰 수와 곱해서 면적을 구하면 된다.
def solution(sizes):
w = [sizes[i][0] for i in range(len(sizes))]
h = [sizes[i][1] for i in range(len(sizes))]
max_w, max_h = max(w), max(h)
if max_w > max_h:
total_max = max_w
for i in range(len(sizes)):
if sizes[i][1] > sizes[i][0]:
w[i], h[i] = h[i], w[i]
max_h = max(h)
answer = max_h * total_max
else:
total_max = max_h
for i in range(len(sizes)):
if sizes[i][0] > sizes[i][1]:
h[i], w[i] = w[i], h[i]
max_w = max(w)
answer = max_w * total_max
return answer
처음으로 바로 통과가 되었다 ㅠ
사실 처음에 완전 탐색이라길래 백트래킹을 생각해야하나, dfs를 써야하나 별 생각을 다했는데 그냥 쉽게 생각하면 바로 풀리는 거였다.
(+) 좀 더 코드를 잘 정리할 순 없을까 싶어서 한번 찾아보았다.
굳이 w,h 리스트를 만들어서 max를 찾고...... 이렇게 할 필요는 없다. 해당 과정을 과감히 삭제하고
스왑 과정을 살린 다음, max함수를 때려버리면 된다.
def solution(sizes):
r, c = 0,0
for row, col in sizes:
if row > col:
row, col = col, row
r = max(r, row)
c = max(c, col)
return r*c
내가 너무 단순하게 생각했다. 스왑할 때 리스트 요소를 직접 스왑해야한다고 생각했는데, 굳이 직접 스왑안하고 그냥 변수로써 임시저장 느낌으로 스왑을 해주고 max 함수를 통해 최대를 계속 구하기만 하면 되는 거였다.
이러니 코드가 훨씬 깔끔해졌다