PROGRAMMERS

[프로그래머스/파이썬] [PCCE 기출문제] 10번 / 공원

kode-daks 2025. 1. 9. 16:03

내 풀이

def solution(mats, park):
    answer = -1 # 놓을 곳이 없을 경우 반환할 값으로 초기화
    found = False # 찾지 못했을 경우로 초기화
    
    # 큰 돗자리부터 시작
    for mat in sorted(mats, reverse=True):
        # 돗자리가 공원을 넘어가지 않도록 범위 설정
        for i in range(len(park)-mat+1):
            for j in range(len(park[0])-mat+1):
                # 공원의 i, j가 이미 점유되었을 경우 더이상 탐색하지 않고 다음으로 넘어감
                if park[i][j] != "-1":
                    continue
                
                # 끝까지 조건에 걸리지 않으면 찾았다고 가정
                found = True
                for p in park[i:i+mat]:
                    l = p[j:j+mat]
                    l.append('-1') # "-1"이 없는 경우를 없애기 위해
                    l = list(set(l))
                    l.remove('-1') # "-1"은 다 지움
                    if l: # "-1" 외에도 남아있다면 점유되었다는 뜻이므로
                        found = False # 찾지 못함을 표시하고 나머지는 더 보지 않고 break
                        break
                # 이곳까지 오면 점유되지 않았으므로 found == True 모든 loop 종료
                if found:
                    break
            if found:
                break
        if found:
            answer = mat
            break
    # 끝까지 found == False라면 answer는 -1 그대로
    return answer

 

 

메모

2차원 리스트에서는 i, j가 헷갈리지 않게 펜 노트를 써보자.