코딩테스트
[프로그래머스] 완전탐색 - 최소직사각형
박매트
2024. 3. 18. 21:33
나의 답 - 결국은 못풀..었..다. ㅠ
def check(filter_list,value):
for i in filter_list:
if value[1] < i[0] and value[0] > i[1]:
return 0
return 1
def solution(sizes):
karo = []
sero = []
for edges in sizes:
karo.append(edges[0])
sero.append(edges[1])
karo.sort(reverse=True)
sero.sort(reverse=True)
i=1
max_k=karo[i]
max_s=sero[i]
answer = max(karo)*max(sero) #가로 중에 젤 큰 값, 세로 중에 젤 큰 값
for i, value in enumerate(sizes):
if value[1] <= max_k and value[0] <= max_s:
filter_list = [i for i in sizes if i != value ]
if check(filter_list, value) == 1:
max_k = value[1]
max_s = value[0]
print(max_k, max_s)
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
그냥 값들 중에서 row 중에 가장 큰 값, col 중에 가장 큰 값을 넣었는데,
if문이 관건이었던 것 같다. 값이 큰 게 row로 값이 작은게 col로 설정하면 되는 구나..
왜냐하면 그냥 뒤집어서 row, col을 관리해주면 되니까.. 위처럼 바꿔끼어놓고.. !!
비슷한 풀이 22
def solution(sizes):
sizes = [sorted(s) for s in sizes]
return max([x[0] for x in sizes]) * max([x[1] for x in sizes])
두 개의 값 (row, col) 중에 큰 값이 row로 작은 값이 col로 설정하는군..
sorted(s) -> 리스트 s의 요소들을 내림차순으로 정리한 것.
row들 중에서 가장 큰 값, col들 중에서 가장 큰 값을 설정하면 되는 것..