๐Ÿ‘ฉโ€๐ŸŽ“๊ณต๋ถ€ - 2024.01.16 ์˜ค๋Š˜์˜ ๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด

์œ ๋ น๊ฐœยท2024๋…„ 1์›” 16์ผ
0

PS-์•Œ๊ณ ๋ฆฌ์ฆ˜2

๋ชฉ๋ก ๋ณด๊ธฐ
14/34
post-thumbnail

27211๋ฒˆ - ๋„๋„› ํ–‰์„ฑ

ํƒ์ƒ‰์„ ํ•˜๋Š”๋ฐ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค! ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด

if nx<0 or ny<0 or nx>=N or ny>=M:
	continue

์ €ํฌ๊ฐ€ ๋ณดํ†ต BFS๋‚˜ DFS๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋Ÿฐ ์”ฉ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๋„˜์–ด๊ฐˆ ์‹œ continue๋ฅผ ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๊ทผ๋ฐ ์ด ๊ทธ๋ž˜ํ”„๋Š” ์œ„์™€ ๊ฐ™์ด ๋„๋„›๋ชจ์–‘์˜ ํ˜•ํƒœ์—ฌ์„œ ๋„˜์–ด๊ฐ€๋„ ๊ทธ๋Œ€๋กœ ๋„˜์–ด๊ฐ„ ๋งŒํผ ์—ฐ์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€๋กœ๊ธธ์ด๊ฐ€ 5๊ณ  ํ˜„์žฌ ๊ฐ€๋กœ์ธ๋ฑ์Šค๊ฐ€ 5์ผ๋•Œ ์˜ค๋ฅธ์ชฝ ํƒ์ƒ‰์„ ํ•˜๋ฉด ํ‰์†Œ๋Œ€๋กœ๋ผ๋ฉด ๊ทธ๋ž˜ํ”„๋ฅผ ๋„˜์–ด์„œ list out of index ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด continue๋ฅผ ๋„ฃ์–ด์ค„ ํ…๋ฐ ์ด ๋ฌธ์ œ๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ๋„๋„› ํ˜•์‹์ด๋ฏ€๋กœ 5->1๋กœ ๋„˜์–ด๊ฐ€ ๋‹ค์‹œ 1๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

N,M = map(int,input().split())
graph = []
que = deque()
for _ in range(N):
    graph.append(list(map(int,input().split())))
visited = [[0]*M for _ in range(N)]

BFS ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž…๋ ฅ์„ ๋ฐ›์•„์ค์‹œ๋‹ค. visited๋กœ ๋ฐฉ๋ฌธ์—ฌ๋ถ€ ํ‘œ์‹œ๋„ ์ค€๋น„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

cnt = 0
for i in range(N):
    for j in range(M):
        if not visited[i][j]:
            if graph[i][j] == 0:
                bfs(i,j)
                cnt += 1

0์€ ๋นˆ ๊ณต๊ฐ„์ด๊ณ  1์€ ์ˆฒ์ด๋ผ ํƒ์ƒ‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ณต๊ฐ„์ด๋ฏ€๋กœ for๋ฌธ์„ ๋Œ๋ ค์„œ 0์ด ๋‚˜์˜จ๋‹ค๋ฉด ๊ทธ ๊ตฌ๊ฐ„์„ ํƒ์ƒ‰ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค. ํƒ์ƒ‰์ด ์™„๋ฃŒ๋˜๋ฉด cnt๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋†’์—ฌ์„œ ๋‚˜์ค‘์— ๋‹ต์„ ๋„์ถœํ•  ๋•Œ ์จ๋จน์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]

deque๋ฅผ import ํ•ด์ฃผ๊ณ  ์ƒํ•˜์ขŒ์šฐ ์„ค์ •์„ ํ•ด์ค๋‹ˆ๋‹ค.

def bfs(x,y):
    que.append([x,y])
    visited[x][y] = 1
    while que:
        x,y = que.popleft()
        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y

์—ฌ๊ธฐ๊นŒ์ง„ ํ‰๋ฒ”ํ•œ DFS์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธ์—ฌ๋ถ€ ํ‘œ์‹œํ•ด์ฃผ๊ณ  4๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ๋Œ๋ ค์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

            if nx>=N:
                nx = nx%N
            if ny>=M:
                ny = ny%M
            if nx<0:
                nx = N + nx 
            if ny<0:
                ny = M + ny

์—ฌ๊ธฐ์„œ ์ด์ œ x, ์ฆ‰ ์„ธ๋กœ๊ฐ’์ด ์„ธ๋กœ์˜ ๊ธธ์ด์ธ N์„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ์„ธ๋กœ๊ฐ’์„ N์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค์Œ ํƒ์ƒ‰ํ•  ์ธ๋ฑ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋กœ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ์— x๊ฐ€ 0 ์ดํ•˜์—ฌ์„œ ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ ์ƒ๊ธด ์ƒํ™ฉ์ด๋ผ๋ฉด N์— ํ•ด๋‹น ์Œ์ˆ˜๋ฅผ ๋”ํ•œ ๊ฐ’์ด ๋‹ค์Œ ํƒ์ƒ‰ํ•  ์ธ๋ฑ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ)N์€ 5, ํ˜„์žฌ ์ธ๋ฑ์Šค๊ฐ€ 0์ด๊ณ  ์ƒ ํƒ์ƒ‰ํ•˜์—ฌ nx๊ฐ€ -1์ด ๋˜์—ˆ๋Š”๋ฐ ์œ„ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ฐ€๋กœ ์ตœ๋Œ€ ๋†’์ด์ธ 5-1=4๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ

            if not visited[nx][ny]:
                if graph[nx][ny] == 0:
                    visited[nx][ny] = 1
                    que.append([nx,ny])

๋ฌผ๋ก  ์ด ๋ชจ๋“  ์กฐ๊ฑด์€ ๋ฐฉ๋ฌธ์„ ํ•˜์ง€ ์•Š์•˜๊ณ  ๋นˆ ๊ณต๊ฐ„(0) ์ด๋ผ๋Š” ์กฐ๊ฑด์ด ์ˆ˜๋ฐ˜๋˜์–ด์•ผ๋งŒ ์ด๋ค„์ง€๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

print(cnt)     

์ถœ๋ ฅํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋‹ต์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




์‹ค์ˆ˜์‚ฌํ•ญ

์ €๋Š” ํŒŒ์ด์ฌ ์–ธ์–ด์˜ ํŠน์ง•์ƒ ์Œ์ˆ˜์ฒ˜๋ฆฌ๋Š” 0์ธ๋ฑ์Šค์—์„œ -1๋นผ๋ฉด -1์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜์—ฌ

            if nx<0:
                nx = N + nx 
            if ny<0:
                ny = M + ny

ํ•ด๋‹น ๊ตฌ๋ฌธ์€ ๋”ฑํžˆ ํ•„์š” ์—†์„ ์ค„ ์•Œ์•˜๋Š”๋ฐ 60ํผ์ฏค ๊ฐ€์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.
์•„๋งˆ -2๊ฐ€ ๋‚˜์˜จ๋‹ค๋˜์ง€, x์™€ y๊ฐ’์ด ๋‘˜๋‹ค ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค๋˜์ง€ ํ•˜๋ฉด ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


profile
ํ•œ๋ฆผ๋Œ€ํ•™๊ต ์ •๋ณด๊ณผํ•™๋Œ€ 2ํ•™๋…„ ์žฌํ•™์ค‘ / ์œก๊ตฐ ์ •๋ณด๋ณดํ˜ธ๋ณ‘ 22-2๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€