구현
+ 완전탐색
으로 풀었다.
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 생각!!
멋있어요