swea 2814 ์ต์ฅ ๊ฒฝ๋ก
์ฌ์ฉ์ธ์ด : PYTHON
ํ์ด
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ์ต์ฅ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ๊ตฌํด์ ํ๋ค.
์ต์ฅ๊ฒฝ๋ก๋ ๊ทธ๋ํ์ ์ ์ ๋ค ์ค ๋ ์ด์ ์ด๋ํ ์ ์์๋ ๊น์ง ํ์ํ ๊ฒฝ๋ก ๊ธธ์ด ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด๋ค.
๋ ์ด์ ์ด๋ํ ์ ์์๋ ๊น์ง ํ์ํ๊ธฐ ์ํด dfs๋ฅผ ํ์ฉํ์๋ค.
1.์ฐ์ ์ ๋ ฅ์ด ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ค๋ก ์ฃผ์ด์ง๊ธฐ ๋๋ฌธ์ ์ด๋ค์ 2์ฐจ์ ํ๋ ฌ๋ก ์ ๋ฆฌํด์ ๊ทธ๋ํ๋ก ํํํ์๋ค.
for _ in range(M):
l.append(list(map(int,input().split()))) # ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์ฐ๊ฒฐ๋ ๊ฐ์
for j in l: # 2์ฐจ์ ํ๋ ฌ์ ๊ทธ๋ํ๋ก ํํ
graph[j[0]].append(j[1])
graph[j[1]].append(j[0])
2.๋ค์์ผ๋ก ๋ชจ๋ ์ ์ ๋ค์ ๋์๊ฐ๋ฉฐ dfs๋ฅผ ์ํํ๋ค.
dfsํจ์ ์์๋ ์ฃผ์ด์ง ์ ์ ์ผ๋ก ๋ถํฐ ์ด๋ํ ์ ์๋ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ฉฐ countํ ๊ฐ์ answer๋ฆฌ์คํธ์ appendํ๋ค.
for j in range(1,N+1):
visited=[False]*(N+1)
cnt=0
dfs(j)
3.dfsํจ์
def dfs(i):
global cnt
visited[i]=True
cnt+=1
flag=1
for p in graph[i]:
if visited[p]==False:
flag=0
dfs(p)
visited[p]=False
cnt-=1
if flag==1:
answer.append(cnt)
return
์์ํ ๋ ธ๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ visited
๋ฆฌ์คํธ์ ๊ธฐ๋กํ๋ค.
ํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ผ๋ฏ๋ก ์นด์ดํธ ๊ฐ์ 1 ์ฆ๊ฐ ์ํจ๋ค.
๐flag๋ณ์ : ๋ ์ด์ ์ด๋ํ ์ ์์๋(๊ทธ๋ํ์ ๊ฐ์ฅ ๋ ์ ์ผ๋ก ์ด๋ํ์๋)๋ฅผ ์ฒดํฌํ๊ธฐ ์ํ ๋ณ์
์ฒดํฌํ๋ ์ด์ ๋ ๋ ์ ์ ๋๋ฌํ์๋ ๊ทธ ๊ฒฝ๋ก์ count๊ฐ์ answer๋ฆฌ์คํธ์ appendํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
graph๋ฆฌ์คํธ๋ฅผ ํ์ฉํ์ฌ ์ธ์ ํ ๋ ธ๋๋ค ์ค False(๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋)์ด๋ฉด flag๋ณ์๋ฅผ 0์ผ๋ก ๋ง๋ค๊ณ (์ต์ํ ํ๋ ์ด์์ ๋ ธ๋๋ ๋ฐฉ๋ฌธ ํ๋ค๋ ํ์) dfs๋ฅผ ์ฌ๊ท๋ก ์ํํ๋ค.
์ฌ๊ท๋ก ์คํ๋์๋ dfs๊ฐ return๋๋ฉด visited[p]=False
๋ก ๋ค์ ๋ฐฉ๋ฌธ๊ธฐ๋ก์ ์์ ์ค๋ค.
๋ํ cnt๊ฐ์ -1 ํด์ ๋ฐฉ๋ฌธํ ๋ ธ๋์ ๊ฐฏ์๋ฅผ ๊ฐฑ์ ํ๋ค.
์ฝ๋
def dfs(i):
global cnt
visited[i]=True
cnt+=1
flag=1
for p in graph[i]:
if visited[p]==False:
flag=0
dfs(p)
visited[p]=False
cnt-=1
if flag==1:
answer.append(cnt)
return
T=int(input())
for i in range(T):
N,M=map(int,input().split())
graph=[list() for _ in range(N+1)]
l=[]
answer=[]
for _ in range(M):
l.append(list(map(int,input().split())))
for j in l:
graph[j[0]].append(j[1])
graph[j[1]].append(j[0])
for j in range(1,N+1):
visited=[False]*(N+1)
cnt=0
dfs(j)
print('#{} {}'.format((i+1),max(answer)))
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[swea 4615-ํ์ด์ฌ]์ฌ๋ฏธ์๋ ์ค์ ๋ก ๊ฒ์ (0) | 2023.06.21 |
---|---|
[swea 1216-ํ์ด์ฌ]ํ๋ฌธ2 (0) | 2023.06.21 |
[swea 1244-ํ์ด์ฌ][S/W ๋ฌธ์ ํด๊ฒฐ ์์ฉ] 2์ผ์ฐจ - ์ต๋ ์๊ธ (0) | 2023.06.21 |
[๋ฐฑ์ค 14500๋ฒ-ํ์ด์ฌ]ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2023.06.20 |
[๋ฐฑ์ค 1107๋ฒ-ํ์ด์ฌ]๋ฆฌ๋ชจ์ปจ (0) | 2023.06.20 |