1068๋ฒ - ํธ๋ฆฌ
ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง ๋, ๋ ธ๋๋ฅผ ํ๋ ๊ณ ๋ฅด๊ณ ํด๋น ๋ ธ๋์ ํ์๋ ธ๋๊น์ง ์น ๋ค ์ง์ ์ ๋ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์์ ํฉ์ ๊ตฌํด๋ด๋ ๋ฌธ์ ์ ๋๋ค.
N = int(input())
graph = [[0]*N for _ in range(N)]
lst = list(map(int,input().split()))
erase = int(input())
visited = [0]*N
๋จผ์ ๊ธฐ๋ณธ์ ์ธ ์
๋ ฅ์ ๋ฐ์ต๋๋ค.
lst์ ๊ฐ ์ธ๋ฑ์ค๋ง๋ค ์ฐ๊ฒฐ๋ ๋
ธ๋๊ฐ ํ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด 0๋ฒ ์ธ๋ฑ์ค์ 1์ด ์๋ค๋ฉด ๋
ธ๋ 0๊ณผ ๋
ธ๋ 1์ ์ฐ๊ฒฐ๋์ด ์๋ค๋ ๋ป์
๋๋ค. -1์ ๋ถ๋ชจ๊ฐ ์์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค์ ๋ค์ด์๋๋ฐ ํด๋น ์ธ๋ฑ์ค๋ ๋ฃจํธ ๋
ธ๋๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉํ ๊ฒ ๊ฐ์ต๋๋ค.
sum = 0
for values in lst:
if values == -1:
sum += 1
continue
else:
graph[sum][values] = graph[values][sum] = 1
sum += 1
๊ทธ๋ํ์ 2์ฐจ์๋ฐฐ์ด๋ก์จ ํธ๋ฆฌ๋ฅผ ๊ตฌํํ๊ฒ ์ต๋๋ค. ๊ทธ๋ํ[์ธ๋ฑ์ค][๋ฒจ๋ฅ] = ๊ทธ๋ํ[๋ฒจ๋ฅ][์ธ๋ฑ์ค] = 1๋ก ํ์ํ์ฌ ๋ ธ๋๋ผ๋ฆฌ ์๋ก ์ฐ๊ฒฐ๋์ด ์์์ ๋ํ๋ด์ฃผ๊ฒ ์ต๋๋ค.
for i in range(len(graph)):
for j in range(len(graph[0])):
if i == erase:
graph[i][j] = 0
if j == erase:
graph[i][j] = 0
์ ํฌ๋ ๋ ธ๋์์ ์ฐ๊ฒฐ์ ๋๊ธฐ ์ํ erase ๋ผ๋ ๋ณ์๋ฅผ ๋ฐ์์ต๋๋ค. ์ด์ erase์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ ธ๋๊ฐ graph์ ์๋ค๋ฉด ์ฃ๋ค 0์ผ๋ก ๋ง๋ค์ด ๋ ธ๋ ์ฌ์ด์ ์ฐ๊ฒฐ์ ๋์ด์ค์๋ค.
ans = 0
dfs(lst.index(-1))
์ด์ dfs๋ฅผ ๋ฃจํธ๋
ธ๋๋ถํฐ ๋๋ฆฌ๊ธฐ ์์ํ๊ฒ ์ต๋๋ค.
0์ด ๋ฃจํธ๋
ธ๋๊ฐ ์๋ ์ ์์ด์ ๋ง์ฝ 0๋ถํฐ ๋๋ฆฌ๋ฉด ๊ฒฐ๊ณผ๊ฐ์ด ํ๋ฆฌ๊ฒ ๋์ฌ ์๋ ์์ต๋๋ค.
def dfs(N):
global ans
visited[N] = 1
boolean = False
N์ด ๋ค์ด์ค๋ฉด ๋ฐฉ๋ฌธํ๊ธฐ๋ฅผ ํด์ฃผ๊ณ
for i in range(len(graph)):
if graph[N][i] == 1 and not visited[i]:
boolean = True
dfs(i)
N๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ์ด ์๋ค๋ฉด ๊ทธ ๋
ธ๋์ ๊ฐ์ ์ฌ๊ท๋ฅผ ํ์ฉํด ๋ ํ์ํด์ค์๋ค.
์ฌ๊ธฐ์ ์ ๊ฐ boolean๊ฐ์ ์ผ๋๋ฐ ์ด๊ฑด ๋ฆฌํ๋
ธ๋๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํจ์
๋๋ค. ์๋ฅผ ๋ค์ด์ ๋ค ๋ฐฉ๋ฌธํ๊ณ ์ ๊ธฐ ์์ ์ ํ์๋ if์์ด ์์ ๋ฐ๋๋์ง ์์ผ๋ฉด ๊ทธ๊ฑด ํ์์ด ๋ง ๋๋ฌ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก boolean์ False๊ฐ์ ์ ์งํ๊ณ ํ์ฌ ํ์์ด ์งํ์ค์ธ ๊ฐ์ ๋ฆฌํ๋
ธ๋๊ฐ ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก
if boolean == False:
ans += 1
๋ฆฌํ๋ ธ๋๊ฐ ๋๋ค๋ฉด ans์ ์นด์ดํธ๋ฅผ 1 ์ฌ๋ ค์ค์๋ค.
if lst.index(-1) == erase:
print(0)
else:
print(ans)
๋ง์ง๋ง์ผ๋ก ๋ฃจํ ๋
ธ๋๋ฅผ ์ง์๋ฒ๋ฆฌ๋ฉด ๋ฆฌํ๋
ธ๋๋ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก 0์ ์ถ๋ ฅํ๊ณ (๋ค์ง์์ง๋๊น)
์๋๋ฉด ans๋ฅผ ์ถ๋ ฅํ๋ฉด ์ ์์ ์ผ๋ก ๋ต์ ๋์ถํ ์ ์์ต๋๋ค.
21937๋ฒ - ์์
์ด ๋ฌธ์ ๋ ๋ฌธ์ ์์ฒด๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ์ ์๊ฐ ์ด๊ณผ ๋ฑ ๊ฐ์ข
์ค๋ฅ๋ฅผ ํผํ๋๊ฒ ์ด๋ ค์ ์ต๋๋ค...
์ผ๋จ ๋ฌธ์ ๋ ์์
ํ๋ฆ์ด ์๊ณ , ๋ฆฌํ ๋
ธ๋๋ฅผ ์์
ํ๊ธฐ ์ํด์ ๊ทธ ์ ์์
ํ๋ฆ์ ๋
ธ๋๋ฅผ ์์
ํด์ผ ํฉ๋๋ค.
๋
ธ๋๊ฐ ์ฃผ์ด์ง ๋, ๋ช ๊ฐ์ ์ด์ ๋
ธ๋๋ฅผ ์์
ํด์ผ ํด๋น ๋
ธ๋๋ฅผ ์์
ํ ์ ์๋์ง ๋ฌป๋ ๋ฌธ์ ์
๋๋ค.
ํธ๋ ๊ฐ๋
์์ฒด๋ ์ด๋ ต์ง ์์ต๋๋ค. ์ฃผ์ด์ง ๋
ธ๋์ ์ญ์์ผ๋ก ๊ทธ๋ํ ์์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ
(1->6 ์ด๋ผ๋ฉด 6->1๋ก) ๊ทธ๋ ๊ฒ ์์ฑ๋ ์ญ์๊ทธ๋ํ์์ ์ฃผ์ด์ง ๋
ธ๋์ ํ์๋
ธ๋ ๊ฐ์๋ฅผ ์ธ์ฃผ๋ฉด ๋๋ฉ๋๋ค.
N,M = map(int,input().split())
graph = [[0]*(N+1) for _ in range(N+1)]
visited = [0]*(N+1)
for _ in range(M):
a,b = map(int,input().split())
graph[b][a] = 1
N๊ณผ M์ ์
๋ ฅ๋ฐ์์ฃผ๊ณ graph๋ฅผ [0]์ด N+1๊ฐ๋งํผ ๋ค์ด์๋ ์ด์ฐจ์ ๋ฐฐ์ด๋ก ์ ์ธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ graph[b][a]๋ฅผ 1๋ก ์ ์ธํจ์ผ๋ก์จ b->a์ธ ์ญ์๊ทธ๋ํ๋ฅผ ์์ฑํฉ๋๋ค.
work = int(input())
sum = 0
dfs(work)
์ฃผ์ด์ง ๋ ธ๋๋ฅผ ๋ฐ์์ฃผ๊ณ ํด๋น ๋ ธ๋์ ํ์๋ ธ๋ ๊ฐ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ dfs๋ฅผ ๋๋ฆฝ๋๋ค.
def dfs(N):
global sum
visited[N] = 1
for i in range(len(graph)):
if graph[N][i] == 1 and not visited[i]:
sum += 1
dfs(i)
๋ฐฉ๋ฌธํ๊ธฐ๋ฅผ ํด์ค ํ ๊ทธ๋ํ ๊ธธ์ด๋งํผ ๋๋ฆฌ๊ณ ๋ง์ฝ ํด๋น ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๊ฒ ์๊ณ ๋ฐฉ๋ฌธ์ ์ํ์ผ๋ฉด sum๊ฐ์ 1 ๋์ฌ์ฃผ๊ณ ํ์๋ ธ๋๋ก ๋ค์ ์ฌ๊ท๋ฅผ ๋๋ฆฝ์๋ค.
print(sum)
๊ทธ๋ฆฌ๊ณ ์ถ๋ ฅํ๋ฉด
๋ต์ ์ ์์ ์ผ๋ก ๋์ค๋๋ฐ
๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ๊ฑธ๋ฆฝ๋๋ค!
์ด๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํด ์๊ฐ์ ๊ฑฐ๋ญํด๋ดค์ต๋๋ค.
์ฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด๋ ์ฌ๊ท์ ํฌ๊ธฐ์ ์ค์ ์ ์ก๊ธฐ๋ณด๋ค๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ ์ผ์ด๋ ์ผ ๊ฐ์ต๋๋ค.
์ง๋ฌธ๊ธ์ ์ฌ๋ ค๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ 10GB๊ฐ ๋์๊ฒ ๊ฐ๋ค๊ณ ํ์๋ค์...
๋ฐ๋ผ์ ๋ฐฐ์ด์ ์ต๋ํ ์ ๊ฒ ํ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋๋ฅผ ์ง๋ดค์ต๋๋ค.
N,M = map(int,input().split())
graph = [[] for _ in range(N+1)]
visited = [0]*(N+1)
for _ in range(M):
a,b = map(int,input().split())
graph[b].append(a)
์ผ๋จ ์ด์ฐจ์ ๋ฆฌ์คํธ์ ์ด์ฐจ์ ์์๋ฅผ ํ๋๋ก ๊ณ ์ ์์ผฐ์ต๋๋ค.
[[0,0,0,0,0,0],[0,0,0,0,0,0,],....] ์ด์๋ ๊ฑธ [[],[]] ๋ก ๋ง๋ค์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ด์ด์ง ๊ฑธ ํํํ๊ธฐ ์ํด ์ญ์ ๊ทธ๋ํ์ ๋์ ๋
ธ๋๋ฅผ ์ธ๋ฑ์ค, ์ญ์ ๊ทธ๋ํ์ ์์์ ๋
ธ๋๋ฅผ value๊ฐ์ผ๋ก ์ก์ ํด๋น ๋
ธ๋๋ค์ด ์ด์ด์ก๋ค๋ ๊ฒ์ ํํํ๋ ค๊ณ ํ์ต๋๋ค.
work = int(input())
sum = 0
dfs(work)
๊ทธ ์ธ ๊ณผ์ ์ ๋น์ทํ๋ฉฐ
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
์ด๋ฐ ํด๋ณด๋ ์๊ฐ์ด๊ณผ๊น์ง ๋์ sysinputํ๊ณ recursionlimit ๊น์ง ์ค์ ํด์ฃผ์์ต๋๋ค.
def dfs(N):
global sum
visited[N] = 1
for i in graph[N]:
if not visited[i]:
sum += 1
dfs(i)
์ฌ๊ธฐ๋ ์ด์ ์ฝ๋์ ์กฐ๊ธ ๋ค๋ฅธ๋ฐ, ํด๋น ๋ ธ๋๊ฐ ๋ค์ด์ค๋ฉด ํด๋น ์ธ๋ฑ์ค์ ์ ๊ทผํด์ (๋์ด ์ด์ด์ง ๋ ธ๋๋๊น) ๋ง์ฝ ํด๋น ์ธ๋ฑ์ค์ ์์ง ๋ฐฉ๋ฌธ์ ์ํ ์ํ๋ผ๋ฉด ์ฌ๊ท๋ฅผ ๋๋ ค ๋ฐฉ๋ฌธํด์ฃผ๋ ํ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค.
print(sum)
์ถ๋ ฅ์ ๋์ผํฉ๋๋ค.
์ ๊ฐ ํญ์ BFS๋ DFS์ธ ๋ ๋
ธ๋๋ค์ด ์ด์ด์ก๋ค๋ ๊ฑธ ์ ๋ฐ์ฉ์ผ๋ก ํํํ๋ค ๋ณด๋ ๋ฐ์ํ ๋ฌธ์ ๊ฐ์ต๋๋ค.
์์ผ๋ก ์ด์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ๊น์ง ๊ณ ๋ คํด์ ์ข ๋ ๋ณ์๋ค์ ํจ์จ์ ์ผ๋ก ์ธ ์ ์๋๋ก ์ ์ธํด์ผ๊ฒ ์ต๋๋ค.