[프로그래머스] 공원

Jin·2024년 10월 2일
1

[PCCE 기출문제] 10번 / 공원

구현 + 완전탐색으로 풀었다.

def solution(mats, park):
    answer = -1
    h = len(park)
    w = len(park[0])
    for i in range(h):
        for j in range(w):
            if park[i][j] != "-1": # 애초에 깔 수 없는 곳에선 시작할 이유가 없다.
                continue
            answer = max(mats_sol(mats,park, i, j),answer)
    
    
    return answer
    
def mats_sol(mats, park, i, j):
    h = len(park)
    w = len(park[0])
    ans = -1
    for s in mats: # 각 매트의 사이즈별 확인
        flag = False # 밑에서 보면 알겠지만 y에서 안된다면 이 돗자리는 그냥 안되는거다.
        for x in range(s):
            for y in range(s):
                ni = x + i
                nj = y + j
                if ni < 0 or ni >= h or nj <0 or nj >= w: # 공원 밖으로 안벗어나게
                    flag = True
                    continue
                if park[ni][nj] != "-1": # 누가 이미 깔아서 돗자리를 깔 수 없다.
                    flag = True
                    continue
        if flag: # 이 사이즈 돗자리 안된다.
            continue # x축 반복문 벗어나기
        ans = max(ans, s) # 만약에 이 돗자리가 된다면 이것중 가장 큰걸로 지정
    return ans

일단 공원에서 -1이 아닌 곳에서 각 사이즈의 돗자리를 깔 수 있는지 완전탐색으로 확인했다.
그리고 이 좌표에서 각각의 돗자리를 까는 것이 가능한지 함수에 넣어서 확인했다.

이 문제에서 핵심은 각각의 돗자리가 가능한지 완탐할 때 사용하는 flag 사용인 거 같다.
한 좌표라도 불가능해지면 이 돗자리는 그냥 깔 수 없다.
이걸 구현하기 위해 필요한 것은 flag이다.

처음에 맞게 구현한 거 같았는데, 아무리 고쳐도 답이 안나와서 봤더니 scope이슈였다.
flag쓸 때는 항상 scope 생각!!

profile
go-getter

2개의 댓글

comment-user-thumbnail
2024년 10월 17일

멋있어요

1개의 답글

관련 채용 정보