2606๋ฒ: ๋ฐ์ด๋ฌ์ค
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด
www.acmicpc.net
๋ฌธ์
์ ์ข ๋ฐ์ด๋ฌ์ค์ธ ์ ๋ฐ์ด๋ฌ์ค๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ํ๋๋ค. ํ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํจํฐ์ ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด 7๋์ ์ปดํจํฐ๊ฐ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ํ์. 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ์ ๋ฐ์ด๋ฌ์ค๋ 2๋ฒ๊ณผ 5๋ฒ ์ปดํจํฐ๋ฅผ ๊ฑฐ์ณ 3๋ฒ๊ณผ 6๋ฒ ์ปดํจํฐ๊น์ง ์ ํ๋์ด 2, 3, 5, 6 ๋ค ๋์ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ํ์ง๋ง 4๋ฒ๊ณผ 7๋ฒ ์ปดํจํฐ๋ 1๋ฒ ์ปดํจํฐ์ ๋คํธ์ํฌ์์์ ์ฐ๊ฒฐ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์ด๋ ๋ 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ๋ค. ์ปดํจํฐ์ ์์ ๋คํธ์ํฌ ์์์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด์ด์ ๊ทธ ์๋งํผ ํ ์ค์ ํ ์์ฉ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ์ ๋ฒํธ ์์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ์ ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ฒซ์งธ ์ค์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1 ๋ณต์ฌ
7
6
1 2
2 3
1 5
5 2
5 6
4 7
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
4
ํ์ด๊ณผ์
๋ป์ง
n = int(input())
t = int(input())
l = [1] + [0] * (n - 1)
c = []
for x in range(t):
c.append(input())
for s in c:
x, y = map(int, s.split())
if l[x - 1] == 1 or l[y - 1] == 1:
l[y - 1] = 1
l[x - 1] = 1
for s in reversed(c):
x, y = map(int, s.split())
if l[x - 1] == 1 or l[y - 1] == 1:
l[y - 1] = 1
l[x - 1] = 1
print(l.count(1) - 1)
๊ทธ๋ฅ ์ธ์๋ฅผ ๋ฐ๊ณ ๋ฐฐ์ด ํ์์ผ๋ก ์๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด์ ๊ฐ์ผ์ ์ํค๋ฉด ์ฝ๊ฒ ๊ฐ๋ฅํ ์ค ์์์๋๋ฐ ์คํจ!
์๊ฐ์ง ๋ชปํ๋ ์์ธ ์ผ์ด์ค๋ค์ด ๋ ์๋ ๊ฑฐ ๊ฐ์
๊ทธ๋์ ๊ณ ๋ฏผ์ ํ๋ค๊ฐ DFS๋ BFS ํ์์ฒ๋ผ ์ฌ๊ท๋ฅผ ๋๋ ค์ ๋ชจ๋ ์ผ์ด์ค๋ฅผ ํ๋จํด์ผ ํ ๊ฑฐ ๊ฐ์์
BFS ํ์์ผ๋ก ์ง๋ ๊ฒ์ผ๋ก ๋ฐ๊ฟจ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฝ๋ ์ ๊ฐ ๋ฐฉ๋ฒ์ 1๋ถํฐ ๊ฐ์ผ์ด ์์์ด ๋๋ค๊ณ ํ์์ผ๋
1๋ถํฐ BFS๊ฐ ๋์๊ฐ๋ฉด์ 1์ด๋ ์ฐ๊ฒฐ๋์ด์๋ ๊ฐ๋ค์ด ์๋ค๋ฉด ๊ทธ ๊ฐ๋ค๋
๋ชจ๋ BFS๊ฐ ๋์๊ฐ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์์ต๋๋ค.
์๊ฒผ๋ ๋ฌธ์ ๋ค
ํ์ด์ฌ์์์ 2์ฐจ์ ๋ฐฐ์ด ์์ฑ ๋ฐฉ๋ฒ
# X ์๋ชป๋ ๋ฐฉ๋ฒ
com = [[0] * (X)] * (Y)
# O ์ณ์ ๋ฐฉ๋ฒ
com = [[0 for i in range(X)] for j in range(Y)]
com = [[0] * (X)] * (Y)
ex)
com = [[0] * (5)] * (5)
com[0][0] = 1
print(com)
>>
[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
ํ์ด์ฌ์์ 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํด์ ์ฌ์ฉํ๋ ค๊ณ ํ์๋๋ ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ธ์ ํ๊ณ
com[0][0] = 1 ๋ก ๋ฐ๊พธ๋ com[n][0]์ ๋ชจ๋ ๊ฐ๋ค์ด 1๋ก ๋ฐ๊ฟ์ง๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๊ทธ๋์ ํด๋น ๋ด์ฉ์ ํด๊ฒฐํด๋ณด๊ณ ์ ๊ฒ์์ ํ๋
ํ์ด์ฌ 2์ฐจ์ ๋ฐฐ์ด ์ ์ธ, ์ด ๋ฐฉ๋ฒ์ ํผํ์ธ์!
2์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํด์ผ ํ๋ ๋ฐฑ์ค BFS ๋ฌธ์ ๋ฅผ ํ๊ณ ์์๋ค. ํ ๋ธ๋ก๊ทธ์์ 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ์ฌ๋ ค๋จ๊ธธ๋, ๊ทธ ์ค ๋ด ๋ง์์ ์ ์ผ ๋๋ ์งง์ ์ฝ๋๋ฅผ ๊ณจ๋ผ ์ผ๋ค. ๊ทธ๋ฐ๋ฐ ์๋ฌด๋ฆฌ ๋ด๋
yechoi.tistory.com
์์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ ์ ์์๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ๋ฉด ์์ ๋ณต์ฌ๋ผ๋ ๊ฒ์ด ์งํ์ด ๋์ด์
1๊ฐ์ ์ธ์๋ง ๋ฐ๊ฟ๋ ์ ์ฒด๊ฐ ๋ฐ๋๋ค๋ ๋ด์ฉ์ด ์์๊ณ 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ๊ณ ์ถ์ผ๋ฉด
com = [[0 for i in range(X)] for j in range(Y)]
ex)
com = [[0 for i in range(5)] for j in range(5)]
com[0][0] = 1
print(com)
>>
[[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
์์ ๊ฐ์ ํ์์ผ๋ก ๋ฐฐ์ด์ ์์ฑํด์ผ ํ๋ค๋ ๋ด์ฉ์ ํ์ธํ ์ ์์์ต๋๋ค.
code
n = int(input())
t = int(input())
com = [[0 for i in range(n + 1)] for j in range(n + 1)]
check = [0] * (n + 1)
num = 0
for _ in range(t):
x, y = map(int, input().split())
com[x][y] = 1
com[y][x] = 1
def dfs(c):
check[c] = 1
for x in range(n + 1):
if com[c][x] == 1 and check[x] == 0:
dfs(x)
dfs(1)
print(check.count(1) - 1)
ํ๊ธฐ์ฐ
์ค๋๋ง์ ์๊ณ ๋ฆฌ์ฆ์ ํธ๋ ํ์คํ ์ด๋ ต๊ณ ์ด๋ป๊ฒ ์ ๊ทผ์ ํด์ผ ํ ์ง ๋จธ๋ฆฟ์์์ ์ ๋์๊ฐ๋๋ผ๊ณ ์.
์ด์ ๋ ์์ฃผ์์ฃผ ํ์ด๊ฐ๋ฉฐ ๊ตณ์ด๋ฒ๋ฆฐ ๋๋ฅผ ์ข ๊นจ์์ผ๊ฒ ๋ค์.
'Algorithm > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2884๋ฒ - ์๋ ์๊ณ (python) (0) | 2021.09.13 |
---|---|
[๋ฐฑ์ค] 10093๋ฒ - ์ซ์ (python) (0) | 2021.09.10 |
[๋ฐฑ์ค] 1094๋ฒ - ๋ง๋๊ธฐ (python) (2) | 2021.09.08 |
[๋ฐฑ์ค] 10430๋ฒ - ๋๋จธ์ง (Python) (3) | 2021.09.07 |
[๋ฐฑ์ค] 2557๋ฒ - Hello World (Python) (5) | 2021.09.06 |