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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

13023๋ฒˆ: ABCDE

๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ๋งž๋Š” A, B, C, D, E๊ฐ€ ์กด์žฌํ•˜๋ฉด 1์„ ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๊ด€๊ณ„์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ด€๊ณ„๋ฅผ ์ด๋ฃจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๊ฐ€๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. DFS๋ฅผ ํƒ์ƒ‰ ํ•˜๋Š”๋ฐ ์žˆ์–ด ์‹œ์ž‘ ์ง€์ ์„ ๊ฐ ๋…ธ๋“œ๋กœ ์ง€์ •ํ•˜์—ฌ ํƒ์ƒ‰์„ ํ•˜๋ฉด ๋œ๋‹ค. ๋ฐฑํŠธ๋ž™ํ‚น์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, `vistied` ์ฒดํฌ/ํ•ด์ œ๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์–ด์•ผ ์ •์ƒ์ ์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

  • A๋Š” B์™€ ์นœ๊ตฌ๋‹ค.
  • B๋Š” C์™€ ์นœ๊ตฌ๋‹ค.
  • C๋Š” D์™€ ์นœ๊ตฌ๋‹ค.
  • D๋Š” E์™€ ์นœ๊ตฌ๋‹ค.

 

 ์ฆ‰, ์ด๋Š” DFS๋กœ ํƒ์ƒ‰ํ•  ๊ฒฝ์šฐ depth๊ฐ€ 4๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ์ฐพ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. 5๋ช…์ด ์นœ๊ตฌ ๊ด€๊ณ„๋ฅผ ์ด๋ฃจ์–ด์•ผ ํ•˜์ง€๋งŒ depth๊ฐ€ 4์ธ ๊ฒฝ์šฐ๊นŒ์ง€๋งŒ ์ฐพ์œผ๋ฉด ๋˜๋Š” ์ด์œ ๋Š” depth๊ฐ€ 0์ธ ๊ฒฝ์šฐ, ์ฆ‰ ์ž์‹ ์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ 4๋ช…์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํƒ์ƒ‰ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

False True False False True
True False True False False
False True False True False
False False True False False
True False False False False

 

 ๋ฌธ์ œ๋Š” DFS๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋˜๊ธฐ์— ์–ด๋ ค์šด ๊ฒƒ์ด ์—†์—ˆ๋Š”๋ฐ... ๊ธฐ์กด๊ณผ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„๋ฅผ ์ดˆ๊ธฐํ™” ํ–ˆ์„ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๊ธฐ์กด์—๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ N * N ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ True๋กœ ํ‘œ์‹œํ•˜์—ฌ ํƒ์ƒ‰ํ•˜์˜€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ์ œ ์ž…๋ ฅ 1์˜ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™”ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ 9%์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค.

 

 ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜๋‹ˆ, ์• ์ดˆ์— ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ๋งŒ ์ถ”๊ฐ€ํ•ด๋‘๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋‹ˆ, ํƒ์ƒ‰์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด์„œ ๊ทธ๋Ÿฐ์ง€ ๋ฌด์‚ฌํžˆ ํ†ต๊ณผํ•˜์˜€๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


def dfs(depth, cur_node):
    if depth == 4:
        print(1)
        exit()

    for next_node in graph[cur_node]:
        if not visited[next_node]:
            visited[next_node] = True
            dfs(depth + 1, next_node)
            visited[next_node] = False


if __name__ == "__main__":
    n, m = map(int, stdin.readline().split())
    graph = [[] * n for _ in range(n)]
    visited = [False] * n

    for _ in range(m):
        i, j = map(int, stdin.readline().split())
        graph[i].append(j)
        graph[j].append(i)

    for node in range(n):
        visited[node] = True
        dfs(0, node)
        visited[node] = False

    print(0)

  depth๊ฐ€ 4๊ฐ€ ๋œ๋‹ค๋ฉด, ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  1์„ ์ถœ๋ ฅํ•˜๊ณ  `exit()`๋ฅผ ํ†ตํ•ด ์ข…๋ฃŒํ•œ๋‹ค. ์ด์™€ ๋ฐ˜๋Œ€๋กœ ๋ชจ๋“  ๋…ธ๋“œ์˜ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜์˜€์Œ์—๋„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€