[BOJ][๐ก5][๋ฐฑ์ค#13023] ABCDE
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
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์ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
5 4
0 1
1 2
2 3
3 4
์ถ๋ ฅ
1
์์ 2
์ ๋ ฅ
5 5
0 1
1 2
2 3
3 0
1 4
์ถ๋ ฅ
1
์์ 3
์ ๋ ฅ
6 5
0 1
0 2
0 3
0 4
0 5
์ถ๋ ฅ
0
์์ 4
์ ๋ ฅ
8 8
1 7
3 7
4 7
3 4
4 6
3 5
0 4
2 7
์ถ๋ ฅ
1
My Sol
import sys
input = sys.stdin.readline
def dfs(u, i):
global stack, arr
if i == 5: return True
for v in arr[u]:
if v in stack: continue
stack.append(v)
if dfs(v, i+1): return True
stack.pop()
return False
N, M = map(int, input().split())
arr = [[] for _ in range(N)]
for _ in range(M):
u, v = map(int, input().split())
arr[u].append(v)
arr[v].append(u)
stack = []
ans = 0
for i in range(N):
if dfs(i, 0):
ans = 1
break
print(ans)
dfs๋ฅผ ํ์ฉํด ๋ฌธ์ ๋ฅผ ํ์๋ค.
- ๋ชจ๋ ๊ด๊ณ๋ฅผ ์๋ฐฉํฅ์ผ๋ก ํ์ฌ 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
- 0๋ถํฐ N-1๊น์ง ๋ชจ๋ ์ง์ ์ 0๋ถํฐ ํ์ฌ dfs๋ฅผ ์ค์ํ๋ค.
- dfs๋ ์์์ ์ธ u์ ์ฐ๊ฒฐ๋ ๋ชจ๋ v์ ๋ํ์ฌ stack์ ์กด์ฌํ์ง ์๋ ์๋ก์ด ๊ด๊ณ์ธ ๊ฒฝ์ฐ ๋ ๊น์ด๋ฅผ ๊น๊ฒ ํ์ฌ ์ฐ๊ฒฐํด๋๊ฐ๋ค.
- stack์ด ์ค๋ณต๋์ง ์๋, ์ฆ 5๊ฐ์ ๊ด๊ณ ๊น์ด๊น์ง ๋ด๋ ค๊ฐ๋ค๋ฉด True๋ฅผ ๋ฐํํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด ๋ฌธ์ ์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ ๊ฒ์ด๋ฏ๋ก ans๋ฅผ 1๋ก ๋ฐ๊พธ๊ณ ์ข ๋ฃํ๋ค.
- ans๋ฅผ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
์๋ฌธ์
์ฌ์ค Node.js๋ก ๋ฌธ์ ๋ฅผ ๋จผ์ ํ์์๋ค.
const fs = require("fs");
const [NM, ...rels] = fs
.readFileSync('/dev/stdin')
// .readFileSync("./t.txt")
.toString()
.split("\n")
.map((a) => a.trim());
const [N, M] = NM.split(" ").map(Number);
const arr = [];
for (let i = 0; i < M; i++) {
arr.push([]);
}
rels.forEach((rel) => {
const [u, v] = rel.split(" ").map(Number);
arr[u].push(v);
arr[v].push(u);
});
const stack = [];
const dfs = (u, n) => {
if (n === 5) return true;
for (v of arr[u]) {
if (stack.includes(v)) continue;
stack.push(v);
if (dfs(v, n + 1)) return true;
stack.pop();
}
};
let ret = 0;
for (let i = 0; i < N; i++) {
if (dfs(i, 0)) {
ret = 1;
break;
}
}
console.log(ret);
๊ฑฐ์ ๋๊ฐ์ ๋ฐฉ์์ธ๋ฐ TypeError๋ฅผ ๊ฒช์ผ๋ฉฐ ๋ฌธ์ ๋ฅผ ์๊พธ ํ๋ ธ๋ค. ๊ทธ๋์ Python์ผ๋ก ๋๊ฐ์ ์ฝ๋๋ฅผ ๊ตฌํํ๋๋ฐ ๋ฐ๋ก ๋ง์๋ค๊ณ ํด์ ์ด์ด๊ฐ ์์๋ค. ๋ง์์ด ์ํ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ