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

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

by mingzoo 2023. 10. 9.

์ง„๋‹จ ๊ฒฐ๊ณผ

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

๊ทธ ๊ฒฐ๊ณผ..

 

 

 

610 -> 645

์ ์ˆ˜๊ฐ€ ์ƒ์Šนํ–ˆ๋‹ค!!

๋ฐฑํŠธ๋ž˜ํ‚น ๋Šช ํƒˆ์ถœ!!!

์—ญ์‹œ ์„ฑ์žฅ์€ ๊ณ„๋‹จํ˜•์ด๋ผ๊ณ  ํ–ˆ๋˜๊ฐ€..๐Ÿฅน

 

 

 

 

 

 

๋“œ๋””์–ด ๊ธฐ๋ณธ 4๋ฌธ์ œ๋ฅผ ๋‹ค ํ‘ธ๋Š” ์พŒ๊ฑฐ๋ฅผ..!

๊ธฐ๋ณธ 4๋ฌธ์ œ๋ฅผ ๋‹ค ํ‘ธ๋‹ˆ๊นŒ ๊ฐ‘์ž๊ธฐ ๋ฌธ์ œ๊ฐ€ ํ•œ 10๊ฐœ..?๊ฐ€ ๋’ค์— ์ถ”๊ฐ€๋˜๋Š” ๊ฑธ ๋ณด์•˜๋‹ค..

๋ญ”๊ฐ€ ์ด์ œ ์‹œ์ž‘์ธ๊ฐ€..ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๋ญ”๊ฐ€ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ๋งŒ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋กœ ๋ณด์˜€๋‹ค

๊ทผ๋ฐ ๋ฌธ์ œ๋งŒ ๊ฐ„๋‹จํ•œ ๊ฑฐ์˜€์„๊นŒ.. ๋ฐฑํŠธ๋ž˜ํ‚น์—์„œ ์ฐฉ์•ˆํ•œ ์•„์ด๋””์–ด๋กœ visitedํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด๋ณด๊ธฐ๋„ํ•˜๊ณ ,, ๋ณด๋‹ค๋ณด๋‹ˆ ์˜ค?์ด๊ฑฐ BFS์•„๋‹Œ๊ฐ€?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์ง€๋งŒ ๊ฒฐ๊ตญ์—” ํ’€์ง€ ๋ชปํ–ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๊ฒฐ๊ณผ์—์„œ๋Š” ์˜ค๋ฅธ์ชฝ ์‚ฌ์ง„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค์‹œํ”ผ ๋ฐ”๋กœ "dfs, bfs์— ๋Œ€ํ•œ ํ•™์Šต์ด ํ•„์š”ํ•ด์š”"๋ผ๋Š” ์ง„๋‹จ์„ ๋ฐ›์•˜๋”ฐ,,

ํ•˜์ง€๋งŒ, ์ ์ˆ˜๊ฐ€ ์˜ฌ๋ž๋‹ค๋Š” ๊ธฐ์จ์ด ๋” ์ปค์„œ ์ด์ œ๋Š” ๊ณต๋ถ€ํ•ด์„œ ํ’€๋ฉด ๋˜์ง€!๋ผ๋Š” ์ž์‹ ๊ฐ์œผ๋กœ ํŒจ๊ธฐ๋กญ๊ฒŒ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค

 

ํ•™์Šต ์ „๋žต

์ด๋ฒˆ ์ฃผ ๋‚ด ํ•™์Šต ์ „๋žต์€ '์ฐจ๊ทผํžˆ ์ˆœ์ฐจ์ ์œผ๋กœ' ์˜€๋‹ค

์ผ๋‹จ ์ง„๋‹จ ๊ฒฐ๊ณผ์—์„œ ๋ฐ”๋กœ INTERMEDIATE LOW -> DFS์—์„œ ๊ฐœ๋…๋“ค์„ ์„ค๋ช…ํ•ด์ฃผ๋Š” ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ”๋‹ค.

ํ•˜์ง€๋งŒ, DFS, BFS๋ฅผ ํ•™๋ถ€ ๋•Œ ๋ฐฐ์› ์ง€๋งŒ ๊ธฐ์–ต ์†์— ํฌ๋ฏธํ•œ ๋‚˜๋Š” NOVICE HIGH->๊ทธ๋ž˜ํ”„ํƒ์ƒ‰ ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ DFS๋ฅผ ํ•˜๊ธฐ ์ „ ๊ฐœ๋…๋“ค์„ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ด์—ˆ๋‹ค.

DFS์— ํ•„์š”ํ•œ ์„ ์ˆ˜ ๊ฐœ๋… ํ•™์Šต ์™„๋ฃŒ!

 

๊ฐœ์ธ์ ์œผ๋กœ DFS๋Š” ๋‚˜์—๊ฒŒ ์–ด๋ ค์šด ์˜์—ญ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— pseudo code๋ถ€ํ„ฐ ์™„์ „ํ•œ ์ฝ”๋“œ๊นŒ์ง€ ๋„์ถœํ•ด๋‚ด๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋‹ค.

์•„๋ž˜๋Š” ์ฝ”๋“œํŠธ๋ฆฌ ์„ค๋ช…์—์„œ ์ œ๊ณตํ•ด์ค€ DFS ํƒ์ƒ‰์— ๋Œ€ํ•œ ์ฝ”๋“œ์ด๋‹ค.

# pseudo code
function dfs(pos)
	visit(pos)
        for children of pos
            if visited[child] == false
                dfs(child)
            
# DFS ํƒ์ƒ‰ - ์ธ์ ‘ํ–‰๋ ฌ
def dfs(vertex):
	for curr_v in range(1, VERTEXS_NUM + 1):
            if(graph[vertex][curr_v] and not visited[curr_v]):
                print(curr_v)
                visited[curr_v] = True
                dfs(curr_v)
                
# DFS ํƒ์ƒ‰ - ์ธ์ ‘๋ฆฌ์ŠคํŠธ
def dfs(vertex):
	for curr_v in graph[vertex]:
            if not visited[curr_v]:
                print(curr_v)
                visited[curr_v] = True
                dfs(curr_v)

ํฌ์ธํŠธ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜์ด๋‹ค.

์™œ๋ƒํ•˜๋ฉด, ๋ฐฑํŠธ๋ž˜ํ‚น์ฒ˜๋Ÿผ ๊ทธ๋ž˜ํ”„์—์„œ ๋” ๊นŠ์ด ๋ชป๋“ค์–ด๊ฐ€๋ฉด ๋‚˜์™€์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํƒ์ƒ‰์„ ํ•˜๋ฉด์„œ ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๋“ค์–ด๊ฐ€๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋Œ€๊ฐœ๋…์„ ์ž…๋ ฅํ•œ ์ฑ„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ฒ ๋‹ค.

 

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

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

์ฝ”ํ…Œ ๊ณต๋ถ€๋ฅผ ์กฐ๊ธˆ๋งŒ์ด๋ผ๋„ ํ•ด๋ดค๋˜ ์‚ฌ๋žŒ์€ ์ด ๋ฌธ์ œ ํ˜•์‹๊ณผ ๋น„์Šทํ•œ ๋ฌธ์ œ๋“ค์„ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์ด ๋ดค์„ ๊ฒƒ์ด๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ๊ฐ€์ ธ์˜จ ์ด์œ ๋Š” ๊ทธ ์ค‘ ํ•œ๋ช…์ด์—ˆ๋˜ ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ ๋˜๋Š”์ง€ ๊ณผ์ •์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

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

ํ’€์ด ์ „๋žต

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

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

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

์ผ๋‹จ DFS๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค๋Š” ์ „๋žต์ด ์ˆ˜๋ฆฝ๋๋‹ค๋ฉด, ์œ„ 3๊ฐ€์ง€ ์กฐ๊ฑด์— ๋งž๋Š” ๊ณณ์„ ๋‹ค๋…€๊ฐ€๋ฉด ๋œ๋‹ค.

 

์œ„ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„  ๊ฒฐ๋ก ์€ ํ•˜๋‚˜๋งŒ ์•Œ๋ฉด๋œ๋‹ค.

'๋์ ์„ ๋ฐฉ๋ฌธํ–ˆ๋‚˜?'

์ด ๊ฒฐ๋ก ์— ๊ฐ™์ด ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ์ถœ๋ ฅ์€ visited[๋][์ ]์„ ํ•ด์ฃผ๋ฉด๋œ๋‹ค.

 

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

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

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

def in_range(x, y):
    if x<0 or x>=n or y<0 or y>=m:
        return False
    if arr[x][y]==0 or visited[x][y]==1:
        return False

    return True

def dfs(x,y):
    for dx, dy in zip(dxs, dys):
        new_x = x + dx
        new_y = y + dy
        if in_range(new_x, new_y):
            visited[new_x][new_y] = 1
            dfs(new_x, new_y)

dfs(0,0)
print(visited[n-1][m-1])

 

์ด ๋ฌธ์ œ ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด DFS๊ฐœ๋… ์•Œ๊ณ ~ ํ›„๋”ฑ ์†จ๋ผ๋ฝ! ํ‘ผ ๊ฑฐ ๊ฐ™์•„๋ณด์ด์ง€๋งŒ, ๊ณ ๋น„๊ฐ€ ๋งŽ์•˜๋‹ค.

์™ผ์ชฝ ์‚ฌ์ง„์€ ๋ชจ๋‘ ๋‚ด๊ฐ€ ์ œ์ถœํ–ˆ๋˜ ๊ฒฐ๊ณผ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๊ณ„~~~์† ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ๋‹ค.

๋†€๋ž๊ฒŒ๋„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋ณผ ์ˆ˜๋ก ํ‹€๋ฆฐ ๊ฒŒ ์—†๋Š” ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋‚˜์™”๋‹ค.

์ด์œ ๋Š” ๋„ˆ๋ฌด ์–ด์ด๊ฐ€ ์—†์—ˆ๋‹ค.

๋Ÿฐํƒ€์ž„์—๋Ÿฌ ๋กœ์ง์ด ๋„ˆ๋ฌด ๊ณผํ•˜๊ฒŒ ๋Œ์•„๊ฐ€๋„ ๋‚˜์ง€๋งŒ, ๋‚ด ๊ฒฝํ—˜์ƒ ๋ฒ”์œ„๊ฐ€ ๋งž์ง€ ์•Š์•„๋„ ๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ข…์ข… ๋ดค๋‹ค.

x<0 or x>=n or y<0 or y>=m

๋ฌธ์ œ๋Š” ๊ทธ๋ฆฌ๋“œ ๋ฒ”์œ„ ์•ˆ์— ํ•ด๋‹น๋˜๋Š”์ง€ ๊ฒ€ํ† ํ•˜๋˜ ํ•จ์ˆ˜ ๋‚ด์šฉ ์ค‘ ์ด ๋ถ€๋ถ„์— ์žˆ์—ˆ๋‹ค.

์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ์ฝ”๋“œ ์•ˆ์—์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ m๊ณผ n์„ ๊ฑฐ๊พธ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.

x<0 or x>=m or y<0 or y>=n

n*m ๊ทธ๋ฆฌ๋“œ์ด๋ฉด nํ–‰์ด๊ธฐ ๋•Œ๋ฌธ์— y์ ๊ณผ n์ด ์—ฐ๊ด€๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ์ง€๊ธˆ ์ƒ๊ฐํ•˜๋‹ˆ ๋‚˜ ์Šค์Šค๋กœ ๋„ˆ๋ฌด ๊ผฌ์•„์„œ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๋ฉ์ฒญ,,

 

DFS ์˜ˆ์ „๋ถ€ํ„ฐ ๋‚˜ํ•œํ… ๋„ˆ๋ฌด ์–ด๋ ค์šด ๊ฑฐ๋ผ๊ณ  ์ง€๋ ˆ ๊ฒ๋จน์—ˆ์—ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ฐจ๊ทผํžˆ ํ‘ธ๋‹ˆ๊นŒ ํ’€๋ฆฌ๋Š” ์ด ์„ฑ์ทจ๊ฐ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ์–ด์„œ ๋„ˆ๋ฌด ๋ฟŒ๋“ฏํ•˜๋‹ค.

๋‚œ์ด๋„ ๋‚ฎ์€ ๋ฌธ์ œ์œ„์ฃผ๋กœ ํ’€์—ˆ์—ˆ๋Š”๋ฐ ๊ณ ๋‚œ๋„ ๋ฌธ์ œ๋“ค์— ๋„์ „ํ•ด๋ด์•ผ๊ฒ ๋‹ค!

728x90