얼렁뚱땅 백준 문제풀이

[백준 문제풀이] 얼렁뚱땅 16236 아기상어 풀이

MOSTAR 2022. 10. 18. 13:23

https://www.acmicpc.net/problem/16236

 

16236번: 아기 상어

N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가

www.acmicpc.net

 

티스토리 복구 되어꾸나 ><

올만이야 반가오

 

from collections import deque
import sys

dx = [0,0,1,-1]
dy = [1,-1,0,0]
def search_mamma(tx,ty,size) :
    global arr
    global ok_list
    q = deque()
    q.append([tx,ty,0])
    global min_mamma
    while q :
        x,y,count = q.popleft()
        for i in range(4) :
            nx = x + dx[i]
            ny = y + dy[i]
            if 0<=nx<n and 0<=ny<n :
                if visited[nx][ny] == 0 and arr[nx][ny] <= size :
                    visited[nx][ny] = 1
                    if arr[nx][ny] == 0 or arr[nx][ny] == size:
                        q.append([nx,ny,count+1])
                    elif arr[nx][ny] < size :
                        if count + 1 <= min_mamma :
                            min_mamma = count+1
                            q.append([nx,ny,count+1])
                            ok_list.append([nx,ny])


arr = []
n = int(input())
baby = []

for i in range(n) :
    tmp = list(map(int,input().split()))
    arr.append(tmp)
    if 9 in tmp :
        baby = [i, tmp.index(9)]
        
arr[baby[0]][baby[1]] = 0
si = 2
all_time = 0
eat_time = 0
while True :
    visited = [[0]*n for _ in range(n)]
    visited[baby[0]][baby[1]] = 1
    ok_list = []
    min_mamma = n*n+1
    search_mamma(baby[0],baby[1],si)
    if len(ok_list) == 0 :
        print(all_time)
        sys.exit()
    all_time += min_mamma
    ok_list.sort(key=lambda x:(x[0],x[1]))
    baby = ok_list[0]
    arr[baby[0]][baby[1]] = 0
    eat_time += 1
    if eat_time == si :
        si += 1
        eat_time = 0