๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ฝ”๋“œํŠธ๋ฆฌ ์ฑŒ๋ฆฐ์ง€] 6์ฃผ์ฐจ (10/11-10/16), BFS

by mingzoo 2023. 10. 13.

๊ฑฐ๋‘์ ˆ๋ฏธํ•˜๊ณ  ์ง„๋‹จ๊ฒฐ๊ณผ๋ถ€ํ„ฐ!

 

 

์ ์ˆ˜๊ฐ€ ์˜ค๋ฅด๊ธด ์˜ฌ๋ž๋‹ค

645 -> 654

๊ทธ๋Ÿด๋งŒํ•œ๊ฒŒ ํ‰๊ฐ€๋ฅผ ํ•˜๋Š”๋ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ’€์—ˆ๋˜ ๋ฌธ์ œ๊ฐ€ DFS ๋ฌธ์ œ์˜€๋‹ค.

๊ทผ๋ฐ ๋ถ„๋ช…ํžˆ!!! ๋‚˜๋Š” ๋ฌธ์ œ์—†์ด ๋‹ค ํ’€์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ œ์ถœํ•˜๋ฉด 40%๊นŒ์ง€ ์ฑ„์ ์ด ์˜ฌ๋ผ๊ฐ”๋‹ค๊ฐ€ 'ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค'๊ฐ€ ๋–ด๋‹ค

๋ถ„๋ช… ํžˆ๋“ ํ…Œ์ผ€์—์„œ ์•ˆ๋งž๋Š”๊ฒŒ ์žˆ๋‹ค๋Š” ๊ฑฐ์˜€๋Š”๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด ๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ์กฐ๊ฑด์„ ๋‹จ๋‹จํžˆ ๋†“์น˜๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ๊ณ„์† ๋‹ค์‹œ ๋ดค๋Š”๋ฐ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚˜ ํ‰๊ฐ€๊ฐ€ ๋๋‚˜๋ฒ„๋ ธ๋‹ค.

๊ทธ๋ž˜๋„ ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„ ์ ์ˆ˜๊ฐ€ ๋ฐ˜์˜์ด ๋œ๊ฑด์ง€ 654์ ์œผ๋กœ ์ ์ˆ˜๊ฐ€ ์˜ค๋ฅด๊ธด ์˜ฌ๋ž๋‹ค.

 

 

 

 

 

 

์ด๋ ‡๊ฒŒ ์˜ˆ์ƒํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์ด DFS ๋ฌธ์ œ๋ฅผ 100%ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ €๋ฒˆ์ฃผ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋˜์—ˆ๊ณ , ์ด ๊น€์— ๊ณ ๋‚œ๋„ DFS๋ฌธ์ œ๋“ค๋„ ํ•ด๊ฒฐํ•ด๋ณด๊ณ , ์ง€๋‚œ์ฃผ์— ๊ณต๋ถ€๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ•œ BFS๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

์˜คํžˆ๋ ค ์ข‹์•„!

 

 

 

11์›” 19์ผ ๋”ฑ๋Œ€

์ฐธ๊ณ ๋กœ ์ง„๋‹จ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ๋•Œ, ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ฒ˜๋Ÿผ ์–ด๋Š์ •๋„ ๊ณต๋ถ€ํ•˜๋ฉด ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋„ ์ œ๊ณตํ•ด์ค€๋‹ค.

์ด๊ฒŒ ์ฐธ ๋งˆ์Œ์— ๋“ ๋‹ค. ํ™•์‹คํ•œ ๋™๊ธฐ๋ถ€์—ฌ๋ฅผ ์ฃผ๋Š” ๋Š๋‚Œ?

์ฝ”ํ…Œ๋ผ๋Š” ๊ฒŒ ๊ณต๋ถ€ํ•˜๋ฉด์„œ๋„ ๋ง‰์—ฐํ•œ ๋Š๋‚Œ์„ ๋งŽ์ด ๋ฐ›๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ •ํ™•ํ•œ ์ˆซ์ž๊ฐ’์œผ๋กœ '37์ผ ํ›„ sw์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ Aํ˜• ํ†ต๊ณผ' ์ด๋ ‡๊ฒŒ ์ œ์‹œํ•ด์ฃผ๋‹ˆ ํ•™์Šต์„ ํ•˜๊ณ  ๋‚˜์„œ์˜ 37์ผ ํ›„์˜ ๋‚ด๊ฐ€ ๋„ˆ๋ฌด ๊ธฐ๋Œ€๋œ๋‹ค.

 

ํ•™์Šต

์ด๋ฒˆ์—” ์ €๋ฒˆ์ฃผ์— ํ•™์Šตํ–ˆ๋˜ DFS์™€ ๋”๋ถˆ์–ด์„œ BFS๋ฅผ ํ•™์Šตํ–ˆ๋‹ค.

์ผ๋‹จ BFS๋Š” DFS์™€ ๋‹ค๋ฅด๊ฒŒ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ํ, ๋ฑ, ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰์˜ BFS์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ๋จผ์ € ํ•™์Šตํ–ˆ๋‹ค.

100%์˜ ์พŒ๊ฐ

์ด๋ ‡๊ฒŒ ๋‹ค์‹œ ์™„์ „ํžˆ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ํ•™์Šตํ•˜๋ฉด์„œ BFS๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ˆ๊นŒ ์•„ ์™œ ๋ฑ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€, BFS๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์–ด๋–ป๊ฒŒ ํƒ์ƒ‰์„ ํ•˜๋Š”๊ฑด์ง€ ํ๋ฆ„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

BFS๋„ DFS์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธ์ ‘ํ–‰๋ ฌ, ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋กœ pseudo ์ฝ”๋“œ๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ํƒ์ƒ‰์„ ํ•˜๋Š” ์›๋ฆฌ(visited๋กœ ํƒ์ƒ‰์—ฌ๋ถ€ ํ™•์ธ, ๊ทธ๋ž˜ํ”„ ๋ฒ”์œ„ํ™•์ธ ๋“ฑ)๋Š” DFS์™€ ์œ ์‚ฌํ–ˆ๊ธฐ์— ์ดํ•ดํ•˜๋Š” ๊ฒŒ ํฌ๊ฒŒ ์–ด๋ ต์ง„ ์•Š์•˜๋‹ค.

๋‹ค๋งŒ, DFS๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ์ƒˆ๋กœ ์ฐพ์€ ๋…ธ๋“œ๋ฅผ ๋„˜๊ธฐ์ง€๋งŒ, BFS๋Š” ์ƒˆ๋กœ ์ฐพ์€ ๋…ธ๋“œ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ด๋‹น ํ๊ฐ€ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† ๋Œ์•„๊ฐ„๋‹ค๋Š” ์ ์ด ์ฐจ์ด์ ์ด๋‹ค.

์ด ์ฐจ์ด์ ์„ ์ข€ ๋” ๋ช…ํ™•ํžˆ ์ฒด๊ฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋‹ค!

 

ํ’€์–ด๋ณธ ๋ฌธ์ œ

# ๋„ค ๋ฐฉํ–ฅ ํƒˆ์ถœ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํŒ๋ณ„ํ•˜๊ธฐ

์œ„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋Š” ์‚ฌ์‹ค 5์ฃผ์ฐจ DFS์—์„œ ํ’€์–ด๋ณธ # ๋‘ ๋ฐฉํ–ฅ ํƒˆ์ถœ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํŒ๋ณ„ํ•˜๊ธฐ์™€ ๋ฐฉํ–ฅ๋งŒ ๋‹ค๋ฅด๊ณ  ๋™์ผํ•œ ๋ฌธ์ œ์ด๋‹ค.

์ฐจ์ด์ ์ด๋ผ๊ณ  ํ•˜๋ฉด ๋„ค๋ฐฉํ–ฅ(์ƒํ•˜์ขŒ์šฐ)์™€ ๋‘๋ฐฉํ–ฅ(ํ•˜, ์šฐ)์ด๋ผ๋Š” ์ ์ด๋‹ค.

n * m ํฌ๊ธฐ์˜ ์ด์ฐจ์› ์˜์—ญ์˜ ์ขŒ์ธก ์ƒ๋‹จ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์šฐ์ธก ํ•˜๋‹จ๊นŒ์ง€ ๋ฑ€์—๊ฒŒ ๋ฌผ๋ฆฌ์ง€ ์•Š๊ณ  ํƒˆ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋™์„ ํ•  ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ์ƒํ•˜์ขŒ์šฐ์— ์ธ์ ‘ํ•œ ์นธ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฑ€์ด ์žˆ๋Š” ์นธ์œผ๋กœ๋Š” ์ด๋™์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ๋ฑ€์ด ๋ฐฐ์น˜ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹ค์„ ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ํƒˆ์ถœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ๋ฑ€์—๊ฒŒ ๋ฌผ๋ฆฌ์ง€ ์•Š๊ณ  ํƒˆ์ถœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”.

์ด ๋ฌธ์ œ ๋˜ํ•œ ํ’€์ด ์ „๋žต์€ ๋™์ผํ•˜๋‹ค.

1. n*m ๊ทธ๋ฆฌ๋“œ ๋ฒ”์œ„ ์•ˆ์— ์žˆ๊ธฐ

2. ๋ฑ€์ด ์—†๋Š” ์ž๋ฆฌ

3. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋˜ ์ž๋ฆฌ

 

์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ ์ ์€ ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํ๋กœ ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ๋ฐ›๊ณ  ํ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋„๋Š” ๊ฒƒ์ด๋‹ค.

 

from collections import deque

n, m = tuple(map(int, input().split()))
q = deque()

arr = [
    list(map(int, input().split()))
    for _ in range(n)
]
visited=[
    [False]*m
    for _ in range(n)
]
dxs, dys = [0,1,0,-1],[1,0,-1,0]

def in_range(x, y):
    return 0<=x and x<n and 0<=y and y<m

def can_go(x,y):
    if not in_range(x,y):
        return False
    if visited[x][y] or arr[x][y] ==0:
        return False
    return True

def push(x, y):
    visited[x][y] = True
    q.append((x,y))

def bfs():
    while q:
        x, y = q.popleft()

        for dx, dy in zip(dxs, dys):
            new_x, new_y = x + dx, y+dy

            if can_go(new_x, new_y):
                push(new_x, new_y)

push(0,0)
bfs()

if(visited[n-1][m-1]):
    print(1)
else:
    print(0)

 

๐Ÿ‘‡๐Ÿป ์•„๋ž˜ ๊ธ€ ๋ณด๊ณ  DFSํ’€์ด์™€ BFSํ’€์ด๋ฅผ ๋น„๊ตํ•ด์„œ ๋ณด๋Š” ๊ฑฐ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹น! ๐Ÿ‘‡๐Ÿป

 

[์ฝ”๋“œํŠธ๋ฆฌ ์ฑŒ๋ฆฐ์ง€] 5์ฃผ์ฐจ (10/4-10/9)

์ง„๋‹จ ๊ฒฐ๊ณผ ์ด๋ฒˆ์—” ๊ณผ์—ฐ ๋ฐฑํŠธ๋ž˜ํ‚น ๋Šช์—์„œ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ์„๊นŒ ๋–จ๋ฆฌ๋Š” ๋งˆ์Œ์œผ๋กœ ์•„์นจ์— ์ผ์–ด๋‚˜์ž๋งˆ์ž ๊ฒฝ๊ฑดํ•œ ๋งˆ์Œ์œผ๋กœ ์‹ค๋ ฅ์ง„๋‹จ์„ ํ•ด๋ณด์•˜๋‹ค. ๊ทธ ๊ฒฐ๊ณผ.. 610 -> 645 ์ ์ˆ˜๊ฐ€ ์ƒ์Šนํ–ˆ๋‹ค!! ๋ฐฑํŠธ๋ž˜ํ‚น ๋Šช ํƒˆ์ถœ!

minjoo-space.tistory.com

 

์•„์ง์€ BFS๋ณด๋‹ค DFS๊ฐ€ ์ต์ˆ™ํ•œ๋ฐ ๋ฌธ์ œ๋ฅผ ๋” ํ’€๋ฉด์„œ ์–ด๋–ค ์ƒํ™ฉ์— BFS, DFS ์ค‘์— ๋ญ๊ฐ€ ๋” ํšจ์œจ์ ์ผ์ง€ ํŒ๋‹จํ•˜๋Š” ์‚ฌ๊ณ ๋ฅผ ๊ฐ€์ง€๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค!!

728x90