본문 바로가기
코딩테스트

[프로그래머스] 완전탐색 - 최소직사각형

by 박매트 2024. 3. 18.

 

 

 

나의 답  - 결국은 못풀..었..다. ㅠ

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들 중에서 가장 큰 값을 설정하면 되는 것..