[BOJ] 13023. ABCDE (๐Ÿฅ‡, BFS/DFS)

lemythe423ยท2023๋…„ 8์›” 14์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
40/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

๐Ÿง ๋ญ˜ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ธ๊ฐ€?

์นœ๊ตฌ ๊ด€๊ณ„๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)๊ณผ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์ด๋ผ๋Š” ์•„์ฃผ ์œ ๋ช…ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ•๋“ค์ด ์žˆ๋‹ค. ์–ด๋–ค ๋ฌธ์ œ๋“ค์€ ๋‘ ๊ฐ€์ง€ ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์„ ํƒํ•ด๋„ ํ’€๋ฆฌ๊ฒ ์ง€๋งŒ ์–ด๋–ค ๋ฌธ์ œ๋Š” ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํšจ์œจ์ ์ผ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋„ ๊ทธ๋Ÿฐ ๋ฌธ์ œ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ?

A โ†’ B โ†’ C โ†’ D โ†’ E ์˜ ๊ด€๊ณ„๋ฅผ ๋ฌป๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์šฉ์–ด๋กœ ๋งํ•˜๋ฉด ๊นŠ์ด4 ์ด์ƒ์ธ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š๋ƒ์˜ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ด ๋ฌธ์ œ๋Š” ์ด ๊ทธ๋ž˜ํ”„์˜ ๊นŠ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. DFS๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค

๐Ÿฅฒ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ• ๊นŒ?

๋ฐฑ์ค€์˜ ํ…€ ํ”„๋กœ์ ํŠธ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋”๋‹ˆ ์ด ๋ฌธ์ œ๋„ ์‚ฌ์ดํด์— ๊ตญํ•œ๋ผ์„œ๋งŒ ์ƒ๊ฐํ•˜๊ฒŒ ๋๋‹ค. ์•„๋ž˜์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ํ•˜๋‚˜์˜ ์‚ฌ์ดํด์— ๋“ค์–ด์žˆ์ง€๋งŒ ์‹œ์ž‘ ๋…ธ๋“œ๊ฐ€ ์–ด๋””์ธ๊ฐ€์— ๋”ฐ๋ผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊นŠ์ด๊ฐ€ ๋‹ค๋ฅด๋‹ค

0์—์„œ ์‹œ์ž‘ํ•˜๋ฉด 0 โ†’ 1 โ†’ 2 โ†’ 3 โ†’ (0) ์ค‘๋ณต๋˜๋Š” ๊ด€๊ณ„ ๋•Œ๋ฌธ์— ๊นŠ์ด 3๊นŒ์ง€ ๋ฐ–์— ์ฐพ์ง€ ๋ชปํ•œ๋‹ค.

ํ•˜์ง€๋งŒ 4์—์„œ ์‹œ์ž‘ํ•˜๋ฉด 4 โ†’ 1 โ†’ 2 โ†’ 3 โ†’ 0 ์ˆœ์„œ๋กœ ๊นŠ์ด 4์˜ ๊ด€๊ณ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

5 5
0 1
1 2
2 3
3 0
1 4

๊ฒฐ๊ตญ ํ•˜๋‚˜์˜ ์‚ฌ์ดํด์„ ์ด๋ฃฌ๋‹ค๊ณ  ํ•ด์„œ ๊ทธ ์‚ฌ์ดํด ๋‚ด์˜ ์–ด๋Š ์ง€์ ์—์„œ ์‹œ์ž‘ํ•˜๋“  ๋™์ผํ•œ ๊นŠ์ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ์•„๋‹Œ ๊ฒƒ์ด๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ํ˜„์žฌ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ–ˆ์„ ๋•Œ ๊นŠ์ด4๊นŒ์ง€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

โŒ ์‹คํŒจ ์ฝ”๋“œ

๋ฌด์กฐ๊ฑด 0๋ฒˆ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘๋˜๋Š” ์ฝ”๋“œ์˜€๋‹ค. ์žฅ๋ ฌํ•˜๊ฒŒ ์‹คํŒจํ–ˆ๋‹ค.

# ABCDE

N, M =  map(int, input().split())
graph = [[] for _ in range(N+1)]

for _ in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

friend = set()
def dfs(i, depth):
    if depth == 4:
        return True
    
    friend.add(i)
    for x in graph[i]:
        if x not in friend and dfs(x, depth+1):
            return True
    friend.remove(i)

    return False

print(int(dfs(0, 0)))

โญ•๏ธ ์„ฑ๊ณต ์ฝ”๋“œ

๊นŠ์ด 4๋ฅผ ์ฐพ์œผ๋ฉด ๊ทธ ์ฆ‰์‹œ True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์ด True ๊ฒฝ์šฐ True๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊นŠ์ด 4์ธ ๊ณณ์„ ํ•œ ๋ฒˆ์ด๋ผ๋„ ์ฐพ์œผ๋ฉด ์ด ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์ „์ฒด์ ์œผ๋กœ True๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

์–ด๋–ค ๋…ธ๋“œ์—์„œ๋“ ์ง€ ํ•œ ๊ตฐ๋ฐ๋ผ๋„ True๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณณ์ด ์žˆ์œผ๋ฉด ๋ฐ”๋กœ 1์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก sol() ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

# ABCDE

N, M =  map(int, input().split())
graph = [[] for _ in range(N)]
visited = [False]*(N)

for _ in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(i, depth):
    if depth == 4:
        return True
    
    visited[i] = True
    for x in graph[i]:
        if not visited[x] and dfs(x, depth+1):
            return True
    visited[i] = False

    return False

def sol():
    for i in range(N):
        if dfs(i, 0):
            return True
    return False

print(int(sol()))
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

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