[BOJ][๐ŸŸก4][๋ฐฑ์ค€#16432] ๋–ก์žฅ์ˆ˜์™€ ํ˜ธ๋ž‘์ด

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #16432


๋ฌธ์ œ

๋–ก์žฅ์ˆ˜ ๋™ํฌ๋Š” ๋งค์ผ ์ƒˆ๋ฒฝ์— ๊ฐ“ ๋งŒ๋“  ๋–ก์„ ๋“ค๊ณ  ์‚ฐ์„ ๋„˜์–ด ์žฅํ„ฐ๋กœ ๊ฐ€์„œ ๋–ก์„ ํŒ๋‹ˆ๋‹ค. ๋™ํฌ๊ฐ€ ๋งŒ๋“œ๋Š” ๋–ก์˜ ์ข…๋ฅ˜๋Š” 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๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

  1. ์ด์ „์ด ์•„๋‹ˆ๋ผ, ์ „๋‚  ๋‚ด๋†“์€ ๋–ก๊ณผ ๊ฐ™์€ ๋–ก์ด ์•„๋‹ˆ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
  2. ๋งŒ์•ฝ ๋–ก์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋–ก์„ ๋‚ด๋†“์„ ์ˆ˜ ์—†๋‹ค.
  3. ์ „์ฒด ๋–ก์˜ ๋ฆฌ์ŠคํŠธ์—์„œ ํ•˜๋‚˜์˜ ๋–ก์„ ๊ฐ€์ง„ ๋‚ ์„ ํฌ์ฐฉํ•œ๋‹ค.
  4. ์ „๋‚ ๊ณผ ๋‹ค์Œ๋‚  ๊ฐ™์€ ๋–ก์„ ๋‚ด๋†“์œผ๋ฉด ์•ˆ ๋˜๋ฏ€๋กœ ์ œ๊ฑฐํ•œ๋‹ค.
  5. ๋งŒ์•ฝ ๊ฐ™์€ ๋–ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ œ๊ฑฐํ•˜๋ฉด ์ œ๊ฑฐ๋กœ ์ธํ•ด ๋–ก์ด ํ•˜๋‚˜๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
  6. ์ฆ‰, ์ œ๊ฑฐ ํ›„ checkํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๋” DFS ์žฌ๊ท€ํ•˜์—ฌ ์ฒดํฌ๋ฅผ ํ•œ๋‹ค.
  7. ๋ชจ๋“  ์ฒดํฌ๋ฅผ ๋งˆ์ง€๋ฉด, ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ํŠน์ • ๋‚ ์˜ set์€ set()์œผ๋กœ ๋น„์–ด์žˆ๋‹ค.
  8. ์ด๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๋ƒฅ ๋งค์ผ์˜ ๋–ก์„ popํ•˜์—ฌ ํ•˜๋‚˜๋งŒ ๋ฝ‘์•„ ์ถœ๋ ฅํ•œ๋‹ค.
  9. ์ด๋•Œ ์ด์ „ ๋‚ ๊ณผ ์šฐ์—ฐํžˆ ๊ฐ™์œผ๋ฉด ์•ˆ๋˜๋ฏ€๋กœ prev๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•ด๋‘์–ด ๊ฒน์น˜์ง€ ์•Š๋„๋ก ๋‹ค์Œ๋‚ ์˜ set์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ํ•˜๋‚˜๋ฅผ ๋ฝ‘๋Š”๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ