๋ฌธ์
https://www.acmicpc.net/problem/19538
๋ฌธ์ ํ์ด
2๊ฐ์ ๋ฑ์ ์ฌ์ฉํด์ ํ์๋ค.
์ฒ์ ์ ํฌ์๋ฅผ ์์์ผ๋ก ์๋ก ๋ฃจ๋จธ๋ฅผ ๋ฏฟ๋ ์ฌ๋๋ค์ start ๋ฑ์ ์ถ๊ฐํ์ฌ ๋ฑ์ด ๋น ๋๊น์ง ํ์์ ์งํํ๋ค.
์๋ก ๋ฃจ๋จธ๋ฅผ ๋ฏฟ๋ ์ฌ๋๋ค์ time ๊ฐ์ ์ ๋ฐ์ดํธ ํด ์ค ๋์๋ ์ฆ์ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ๊ฒ์ด ์๋๋ผ,
๋ฐ๋ก que๋ผ๋ ๋ฑ์ ์ถ๊ฐํด์ ํด๋น ํ์์ด ๋๋ ์ดํ์ ์ ๋ฐ์ดํธ๋ฅผ ํด์ฃผ์๋ค.
์ฆ์ ์ ๋ฐ์ดํธ ํ๋ ๊ฒฝ์ฐ, ๋ค์ ์์๋ค์ ํ์์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ๋
from collections import deque
n=int(input())
people=[]
for i in range(n):
t=list(map(int,input().split()))
t.pop()
people.append(t)
people.insert(0,[])
m=int(input())
start=list(map(int,input().split()))
time=[-1]*(n+1)
for i in start:
time[i]=0
##์ต์ด์ ํฌ์ 0์ผ๋ก ์ด๊ธฐํ
#1๋ฒ๋ถํฐ ์์ ์ ์**
start=deque(start)
que=deque([])
while(start):
index=start.popleft()
temp=people[index]
move=[]
for i in temp:
count=0
if time[i]!=-1:
continue ##์ด์ ์ ๋ฐ๋
leng=len(people[i])
for j in range(leng):
if time[people[i][j]]!=-1:
count+=1
if leng>count*2:
continue
que.append(i)
if not start:
while(que):
tmp=que.popleft()
time[tmp]=time[index]+1
start.append(tmp)
time.remove(time[0])
print(*time)
๊ธฐํ
์ฝ๋์ ํน๋ณํ ์ด๋ก ์ด ํ์ํ ๊ฒ์ ์๋์ง๋ง, ์ธ๋ฑ์ค ์ฒ๋ฆฌ ๊ณผ์ ์ด ํท๊ฐ๋ ค์ ์ฝ๋ ๊ตฌํ์ด ์๊ฐ๋ณด๋ค ์ค๋๊ฑธ๋ ธ๋ค.
๋, ์ฒ์์๋ time๊ฐ์ ๋ฐ๋ก๋ฐ๋ก ์ ๋ฐ์ดํธ ํด์ฃผ์ด์ ๊ทธ ์ดํ ๊ฐ๋ค์ ๋ํ ์ฐจ์ง์ด ์๊ธฐ๊ธฐ๋ ํ๊ณ
์ ๋ ฅ ๊ฐ๋ค์ zero base๋ผ๊ณ ์๊ฐํด์ ์ด์ํ ๊ฐ์ ๋ถ๋ฌ์์ ๊ณ์ฐํ๊ธฐ๋ ํ๋ค๐ ๐
'๐ปAlgorithm > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/๋ฐฑ์ค] 20041 Escaping - ์๋ฐ,ํ์ด์ฌ (2) | 2021.10.08 |
---|---|
[BOJ/๋ฐฑ์ค] 20047 ๋์ ์ฎ๊ธฐ๊ธฐ - ์๋ฐ (0) | 2021.10.05 |
[BOJ/๋ฐฑ์ค] 1074 Z - ํ์ด์ฌ (0) | 2021.09.17 |
[BOJ/๋ฐฑ์ค] 14891 ํฑ๋๋ฐํด - ํ์ด์ฌ (0) | 2021.09.15 |
[BOJ/๋ฐฑ์ค] 13302 ๋ฆฌ์กฐํธ - ํ์ด์ฌ (0) | 2021.08.25 |