๐ ๋ฌธ์
BOJ ์๊ณ ๋ฆฌ์ฆ ์บ ํ์๋ ์ด N๋ช ์ด ์ฐธ๊ฐํ๊ณ ์๋ค. ์ฌ๋๋ค์ 0๋ฒ๋ถํฐ N-1๋ฒ์ผ๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , ์ผ๋ถ ์ฌ๋๋ค์ ์น๊ตฌ์ด๋ค.
์ค๋์ ๋ค์๊ณผ ๊ฐ์ ์น๊ตฌ ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ฌ๋ A, B, C, D, E๊ฐ ์กด์ฌํ๋์ง ๊ตฌํด๋ณด๋ ค๊ณ ํ๋ค.
- A๋ B์ ์น๊ตฌ๋ค.
- B๋ C์ ์น๊ตฌ๋ค.
- C๋ D์ ์น๊ตฌ๋ค.
- D๋ E์ ์น๊ตฌ๋ค.
์์ ๊ฐ์ ์น๊ตฌ ๊ด๊ณ๊ฐ ์กด์ฌํ๋์ง ์ํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋์ ์ N (5 ≤ N ≤ 2000)๊ณผ ์น๊ตฌ ๊ด๊ณ์ ์ M (1 ≤ M ≤ 2000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ์ ์ a์ b๊ฐ ์ฃผ์ด์ง๋ฉฐ, a์ b๊ฐ ์น๊ตฌ๋ผ๋ ๋ป์ด๋ค. (0 ≤ a, b ≤ N-1, a ≠ b) ๊ฐ์ ์น๊ตฌ ๊ด๊ณ๊ฐ ๋ ๋ฒ ์ด์ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค.
๐์ถ๋ ฅ
๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง๋ A, B, C, D, E๊ฐ ์กด์ฌํ๋ฉด 1์ ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํด์
๋ฌธ์ ์์ ๋งํ๋ ์น๊ตฌ ์ฌ์ด๋ 5๋ช ์ด ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
๊ทธ๋ฆผ 1์ 0์ ์น๊ตฌ 0 -> 1 -> 2 -> 3 -> 4 ์ด๋ ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ค. ๋๋ฌธ์ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง๋ ์น๊ตฌ์ฌ์ด๋ค.
๊ทธ๋ฆผ 2๋ 2 ๋๋ 4์์ ์์ํ๋ฉด ๋ฌธ์ ์กฐ๊ฑด์ ๋ง๋ ์น๊ตฌ์ฌ์ด๊ฐ ๋ ์ ์๋ค.
2 -> 3 -> 0 -> 1 -> 4
4 -> 1 -> 0 -> 3 -> 2
๊ทธ๋ฆผ 3์ ์ด๋์ ์์ํ์ฌ๋ ์น๊ตฌ์ฌ์ด๊ฐ 3๋ช ์ด๊ณ 5๋ช ์ด ๋ ์ ์๋ค.
๋๋ฌธ์ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง๋ ์น๊ตฌ์ฌ์ด๋ ์๋ค.
ํด๋น๋ฌธ์ ๋ DFS๋ก ์ ๊ทผํ์๋ค. ๊น์ด๊ฐ 4์ผ๋ ์ ๋ต์ด 1์ด ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค. (๊น์ด๊ฐ 4๋ผ๋ ๊ฒ์ ๋ ธ๋(์น๊ตฌ)๋ 5๊ฐ)
๐ป ์ฝ๋
import sys
sys.setrecursionlimit(10**4)
input = sys.stdin.readline
def dfs(graph, v, visited, cnt):
global ans
if cnt == 4: # ๊น์ด๊ฐ 4๋ผ๋ฉด ans๋ฅผ 1๋ก ์ด๊ธฐํ
ans = 1
return
for i in graph[v]:
if not visited[i]:
visited[i] = True
dfs(graph, i, visited,cnt+1)
visited[i] = False # ๋ค์ ๋ฐฉ๋ฌธํด๋ณด๊ธฐ ์ํด False ๋ก (๋ฐฑํธ๋ํน?)
n,m = map(int,input().rstrip().split())
graph = [[] for i in range(n)]
ans = 0
# ๊ทธ๋ํ ์ด๊ธฐํ
for _ in range(m):
a,b= map(int,input().rstrip().split())
graph[a].append(b)
graph[b].append(a)
# ์ฐ๊ฒฐ ๊ฐ์ ์ด 4 ์ด์์ผ ๋๋ง ํด๋น ๋ฌธ์ ์ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํ ์ ์๋ค.
if m >= 4:
for node in range(n):
visited = [False] * n
visited[node] = True # ์์ ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
dfs(graph, node, visited, 0) # DFS ์์
if ans == 1: # ๊น์ด๊ฐ 4์ธ๊ฒ ์๋ค๋ฉด ๋ฉ์ถค
break
print(ans)
๐ญ ์ํ์ฐฉ์ค
๋ฐํ์ ์๋ฌ๋ sys.setrecursionlimit์ ํ์ง ๋ชปํด์ ๊ทธ๋ฌ๋ค ์น๊ณ , ์ฒซ๋ฒ์งธ ํ๋ ธ์ต๋๋ค์ ์ด์ ๋ ๋ฐ๋กvisited[i] = False๋ฅผ ํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋ฒ ๋ฐฉ๋ฌธ ํ๋ ๊ณณ์ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์์์ผํ๋ ๊ฒ ๋ง์ง๋ง, ๋ค๋ฅธ ๊ฒฝ๋ก๋ก๋ ๊ฐ๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ False๋ก ์ด๊ธฐํ ํด์ค ๊ฒ์ด๋ค. n๊ณผ m ์๋ฆฌ์ฆ์์ ๋น์ทํ ๊ฒฝํ์ ํ ์ ์ด ์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ ๊ฒ ํด์ False ๋ฅผ ์ฃผ์๋๋ ์ด์ ์๊ฐ์ด๊ณผ๊ฐ ๋์๋ค..ใ
๋ค์ ๋ฉ๋ถ์ด ์์ง๋ง ๋ง์ ๋ค ์ก๊ณ pypy๋ก ์ ์ถํ์์ง๋ง ๊ทธ๋๋ ๊ฒฐ๊ณผ๋ ๋ณํจ์์๋ค. ๊ทธ๋์ ๋์ค์ ๋ค์ ํด๋ณผ๊นํ๋ค๊ฐ DFS ํจ์ ๊ตฌํ ๋ถ๋ถ์์ ์๊ฐ์ ์ค์ผ ์ ์๋ ๋ถ๋ถ์ ๋ฐ๊ฒฌํ์๋ค.
if cnt == 4 ์ด๋ถ๋ถ์ธ๋ฐ, ๋์ ์๊ฐ ์ด๊ณผ ๋ฌ๋ ์ฝ๋๋ ์ด๋ ๊ฒ ์ ๋ต์ด 1๋ก ํ๋ณ ๋๋ ๊ณ์ ๋๊น์ง ํ์์ ํ๋ ํํ์๋ค. ๊ทธ๋์ cnt ==4 ๋ผ๋ฉด ans ์ด๊ธฐํ ํด์ค๋ค return ํ์๋๋ ์๊ฐ ์ด๊ณผ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค!!!ใ ใ
๐ ๋ฌธ์ ๋งํฌ ABCDE
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11403๋ฒ: ๊ฒฝ๋ก ์ฐพ๊ธฐ - ํ์ด์ฌ (0) | 2022.06.19 |
---|---|
[๋ฐฑ์ค] 5430๋ฒ: AC - ํ์ด์ฌ (0) | 2022.06.16 |
[๋ฐฑ์ค] 1331๋ฒ: ๋์ดํธ ํฌ์ด - ํ์ด์ฌ (0) | 2022.06.13 |
[๋ฐฑ์ค] 15312๋ฒ: ์ด๋ฆ ๊ถํฉ - ํ์ด์ฌ (1) | 2022.06.13 |
[๋ฐฑ์ค] 1107๋ฒ: ๋ฆฌ๋ชจ์ฝ - ํ์ด์ฌ (0) | 2022.06.10 |