ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿšฉ ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰, BFS

 

thinking

queue์—๋‹ค ์ฒ˜์Œ 1์ธ ์• ๋“ค์˜ ์ขŒํ‘œ๋ฅผ ๋‹ค ๋„ฃ๊ณ  ์‚ฌ๋ฐฉํƒ์ƒ‰ํ•˜๋ฉด์„œ 1๋กœ ๋ฐ”๊พธ๊ณ , ๋ฐ”๊พผ ์• ๋“ค์˜ ์ขŒํ‘œ๋ฅผ ๋˜ ํ์— ๋„ฃ๊ณ  ์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฒฝ๋กœ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์•ผํ•ด์„œ ๊ธธ์ด์ฒดํฌํ•  visited๋ฅผ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

 

  โ–ถ point 1   

์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋‘ 1์ด๋ฉด 0์„ ์ถœ๋ ฅ, ์ตœ์ข…์ ์œผ๋กœ 0์ด ๋‚จ์•„์žˆ์œผ๋ฉด -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค
ํŒŒ์ด์ฌ์˜ all๊ณผ any์— ๋Œ€ํ•ด ์•Œ๊ฒŒ๋๋‹ค. ๋Œ€๋ฐ•์‚ฌ๊ฑด


all(), any() ํ•จ์ˆ˜๋Š” ํŒŒ์ด์ฌ ๋นŒํŠธ์ธ ํ•จ์ˆ˜์ด๋ฉฐ ์กฐ๊ฑด ์„ฑ๋ฆฝ ์œ ๋ฌด์— ๋”ฐ๋ผ True / False๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
์ธ์ž๋Š” ํ•˜๋‚˜๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜๋ณต๊ฐ€๋Šฅํ•œ ์ž๋ฃŒํ˜•(iterable)์ด์–ด์•ผํ•œ๋‹ค.
ํŒŒ์ด์ฌ์—์„œ ๋นˆ ๊ฐ’, 0, None์€ False๋กœ ์ธ์‹ํ•œ๋‹ค.

All

์กฐ๊ฑด์ด ์ „๋ถ€ True์ด๋ฉด True๋ฅผ ๋ฆฌํ„ด, ํ•˜๋‚˜๋ผ๋„ ํ‹€๋ฆด ๊ฒฝ์šฐ False๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
(์ธ์ž๋กœ ๋ฐ›์€ ์ž๋ฃŒํ˜•์ด ๋น„์–ด์žˆ์œผ๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค - ex. all([ ]) : True )

Any

์กฐ๊ฑด์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งž์œผ๋ฉด True๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , ๋ชจ๋“  ์š”์†Œ๊ฐ€ False์ธ ๊ฒฝ์šฐ์—๋งŒ False๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
(์ธ์ž๋กœ ๋ฐ›์€ ์ž๋ฃŒํ˜•์ด ๋น„์–ด์žˆ์œผ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค - ex. any([ ]) : False  )

#a์— 0์ด ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด True ๋ฆฌํ„ด
if all(0 not in array for array in a):
	return True

#a์— 0์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด True ๋ฆฌํ„ด
if any(0 in array for array in a):
	return True

 

  โ–ถ point 2   


2์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ตœ๋Œ€๊ฐ’, ์ตœ์†Œ๊ฐ’ ๊ตฌํ•˜๋Š” ๋ฒ• : map

arr = [[1,2,3],[4,5,6],[7,8,9]]

# ์ตœ๋Œ€๊ฐ’
max(map(max, arr))  # 9 

# ์ตœ์†Œ๊ฐ’
min(map(min, arr))  # 1 

 

 

์ฝ”๋“œ

from collections import deque

M, N = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(N)]
visited = [[0]*M for _ in range(N)]
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

if all(0 not in array for array in a):
    print(0)

else:
    deq = deque()
    for i in range(N):
        for j in range(M):
            if a[i][j] == 1:
                deq.append((i,j))

    while deq:
        x, y = deq.popleft()
        for d in range(4):
            nx = x + dx[d]
            ny = y + dy[d]
            if 0<=nx<N and 0<=ny<M and a[nx][ny] == 0:
                a[nx][ny] = 1
                visited[nx][ny] = visited[x][y]+1
                deq.append((nx,ny))

    if any(0 in array for array in a):
        print(-1)
    else:
        print(max(map(max, visited)))

 

๋Œ“๊ธ€