[BOJ][๐ก4][๋ฐฑ์ค#16432] ๋ก์ฅ์์ ํธ๋์ด
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ก์ฅ์ ๋ํฌ๋ ๋งค์ผ ์๋ฒฝ์ ๊ฐ ๋ง๋ ๋ก์ ๋ค๊ณ ์ฐ์ ๋์ด ์ฅํฐ๋ก ๊ฐ์ ๋ก์ ํ๋๋ค. ๋ํฌ๊ฐ ๋ง๋๋ ๋ก์ ์ข ๋ฅ๋ 1๋ฒ๋ถํฐ 9๋ฒ๊น์ง ์์ต๋๋ค. ์ฐ์๋ ๋ํฌ๊ฐ ๋ํ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ํฌ๋ฅผ ํ๋ฐํ์ฌ ๋ก์ ํ๋ ๊ฐ์ ธ๊ฐ๋ ํธ๋์ด๊ฐ ์ด๊ณ ์์ต๋๋ค. ์ด ํธ๋์ด๋ ์ ๋ง์ด ๊น๋ค๋ก์ ์ ๋ ์ ๋จน์๋ ๋ก๊ณผ ๊ฐ์ ์ข ๋ฅ์ ๋ก์ด๋ฉด ๋จน์ง ์์ต๋๋ค. ๋ง์ฝ ์ค ์ ์๋ ๋ก์ด ์๋ค๋ฉด ๋ํฌ๋ ํธ๋์ด์๊ฒ ์ก์๋จนํ๊ณ ๋ง๋๋ค. ๋ํฌ๋ N์ผ ๋์ ๋ก์ ํ๋ฌ ๋งค์ผ ์ฅํฐ์ ๋๊ฐ์ผ ํฉ๋๋ค. ๋ํฌ๊ฐ ๋ง๋๋ ๋ก๋ค์ ์ข ๋ฅ๋ ์ฌ๋ฃ ๊ณต๊ธ ์ฌ์ ์ ๋ฐ๋ผ ์ข ๋ฅ๊ฐ ๋งค์ผ ๋ฌ๋ผ์ง๋๋ค.ย ๋ํฌ๊ฐย N์ผ ๋์ ํธ๋์ด์๊ฒ ์ก์๋จนํ์ง ์๋๋ก ํธ๋์ด์๊ฒ ์ค ๋ก๋ค์ ๊ณจ๋ผ์ฃผ์ธ์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ๋ํฌ๊ฐ ๋ก์ ํ์์ผ ํ ๋ ์ ์ N์ด (1 โค N โค 1,000) ์ด ์ฃผ์ด์ง๋๋ค. i+1 (1 โค i โค N) ๋ฒ์งธ ์ค์๋ mi, ai,1, ai,2, โฆ, ai,miย (1 โค mi โค 9, 1 โค ai,1ย < ai,2ย < โฆ < ai,mi โค 9) ๊ฐ ์ฃผ์ด์ง๋๋ฐ mi๋ ๋ํฌ๊ฐ i๋ฒ์งธ ๋ ๋ค๊ณ ๊ฐ๋ ๋ก๋ค์ ๊ฐ์์ด๊ณ ai,j๋ ๋ํฌ๊ฐ ๊ฐ์ ธ๊ฐ๋ ๋ก์ ์ข ๋ฅ์ ๋๋ค.
์ถ๋ ฅ
๋ํฌ๊ฐ N์ผ๋์ ํธ๋์ด์๊ฒ ๋ก์ ์ค ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด i (1 โค i โค N) ๋ฒ์งธ ์ค์ ๋ํฌ๊ฐ ํธ๋์ด์๊ฒ ์ฃผ์ด์ผ ํ ๋ก์ ์ถ๋ ฅํฉ๋๋ค. ์ด ๋ก์ ๋ํฌ๊ฐ i๋ฒ์งธ ๋ ์ ๋ง๋ ๋ก์ด์ด์ผ ํฉ๋๋ค. ๋ง์ฝ ๋ํฌ๊ฐ ๋ก์ ์ค ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ฒซ ๋ฒ์งธ ์ค์ โ-1โ ํ๋๋ง ์ถ๋ ฅํ๊ณ ๋ ์ด์ ์๋ฌด๊ฒ๋ ์ถ๋ ฅํ์ง ์์์ผ ํฉ๋๋ค.ย ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง์ธ ๊ฒฝ์ฐ ๊ทธ ์ค ํ๋๋ง ์ถ๋ ฅํฉ๋๋ค.
์์
์์ 1
์ ๋ ฅ
3
3 1 2 3
2 1 2
2 2 3```
<br>
์ถ๋ ฅ
2 1 3```
์์ 2
์ ๋ ฅ
3
3 7 8 9
1 1
1 1
์ถ๋ ฅ
-1
My Sol
def check(i):
global dds
if len(dds[i]) == 1:
d = dds[i].pop()
dds[i].add(d)
prev = i-1
next = i+1
if prev > -1 and (d in dds[prev]):
dds[prev].remove(d)
check(prev)
if next < N and (d in dds[next]):
dds[next].remove(d)
check(next)
N = int(input())
dds = []
for i in range(N):
n, *arr = map(int, input().split())
dds.append(set(arr))
for i in range(N):
check(i)
for dd in dds:
if not dd:
print(-1)
quit()
prev = dds[0].pop()
print(prev)
for i in range(1, N):
if prev in dds[i]:
dds[i].remove(prev)
prev = dds[i].pop()
print(prev)
set์ hash์ DFS๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋ค.
- ์ด์ ์ด ์๋๋ผ, ์ ๋ ๋ด๋์ ๋ก๊ณผ ๊ฐ์ ๋ก์ด ์๋๊ธฐ๋ง ํ๋ฉด ๋๋ค.
- ๋ง์ฝ ๋ก์ ๊ฐ์๊ฐ ํ๋์ธ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ก์ ๋ด๋์ ์ ์๋ค.
- ์ ์ฒด ๋ก์ ๋ฆฌ์คํธ์์ ํ๋์ ๋ก์ ๊ฐ์ง ๋ ์ ํฌ์ฐฉํ๋ค.
- ์ ๋ ๊ณผ ๋ค์๋ ๊ฐ์ ๋ก์ ๋ด๋์ผ๋ฉด ์ ๋๋ฏ๋ก ์ ๊ฑฐํ๋ค.
- ๋ง์ฝ ๊ฐ์ ๋ก์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ ์ ๊ฑฐํ๋ฉด ์ ๊ฑฐ๋ก ์ธํด ๋ก์ด ํ๋๊ฐ ๋์๋์ง ์ฒดํฌํ๋ค.
- ์ฆ, ์ ๊ฑฐ ํ checkํ๋ ํจ์๋ฅผ ํ ๋ฒ ๋ DFS ์ฌ๊ทํ์ฌ ์ฒดํฌ๋ฅผ ํ๋ค.
- ๋ชจ๋ ์ฒดํฌ๋ฅผ ๋ง์ง๋ฉด, ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ํน์ ๋ ์ set์ set()์ผ๋ก ๋น์ด์๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๊ทธ๋ฅ ๋งค์ผ์ ๋ก์ popํ์ฌ ํ๋๋ง ๋ฝ์ ์ถ๋ ฅํ๋ค.
- ์ด๋ ์ด์ ๋ ๊ณผ ์ฐ์ฐํ ๊ฐ์ผ๋ฉด ์๋๋ฏ๋ก prev๋ฅผ ๋ฐ๋ก ์ค์ ํด๋์ด ๊ฒน์น์ง ์๋๋ก ๋ค์๋ ์ set์์ ์ ๊ฑฐํ๊ณ ํ๋๋ฅผ ๋ฝ๋๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ