We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1766๋ฒˆ: ๋ฌธ์ œ์ง‘

Redddy 2023. 1. 13. 00:58

๐Ÿ”ˆ ๋ฌธ์ œ

๋ฏผ์˜ค๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ์ด N๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ œ์ง‘์„ ํ’€๋ ค๊ณ  ํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ๋‚œ์ด๋„ ์ˆœ์„œ๋กœ ์ถœ์ œ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰ 1๋ฒˆ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฌธ์ œ์ด๊ณ  N๋ฒˆ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

์–ด๋–ค ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€๊นŒ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ›‘์–ด๋ณด๋˜ ๋ฏผ์˜ค๋Š”, ๋ช‡๋ช‡ ๋ฌธ์ œ๋“ค ์‚ฌ์ด์—๋Š” '๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ'๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‚˜๋ฉด 4๋ฒˆ ๋ฌธ์ œ๊ฐ€ ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์ด๋‹ค. ๋ฏผ์˜ค๋Š” ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

1. N๊ฐœ์˜ ๋ฌธ์ œ๋Š” ๋ชจ๋‘ ํ’€์–ด์•ผ ํ•œ๋‹ค.
2. ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ๋Š”, ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋จผ์ € ํ’€์–ด์•ผ ํ•œ๋‹ค.
3. ๊ฐ€๋Šฅํ•˜๋ฉด ์‰ฌ์šด ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋„ค ๊ฐœ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. 4๋ฒˆ ๋ฌธ์ œ๋Š” 2๋ฒˆ ๋ฌธ์ œ๋ณด๋‹ค ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹๊ณ , 3๋ฒˆ ๋ฌธ์ œ๋Š” 1๋ฒˆ ๋ฌธ์ œ๋ณด๋‹ค ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•˜์ž. ๋งŒ์ผ 4-3-2-1์˜ ์ˆœ์„œ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ ๋˜๋ฉด ์กฐ๊ฑด 1๊ณผ ์กฐ๊ฑด 2๋ฅผ ๋งŒ์กฑํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์กฐ๊ฑด 3์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค. 4๋ณด๋‹ค 3์„ ์ถฉ๋ถ„ํžˆ ๋จผ์ € ํ’€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์กฐ๊ฑด 3์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆœ์„œ๋Š” 3-1-4-2๊ฐ€ ๋œ๋‹ค.

๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜์™€ ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ๋ฏผ์˜ค๊ฐ€ ํ’€ ๋ฌธ์ œ์˜ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ˆ˜ N(1 ≤ N ≤ 32,000)๊ณผ ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‘ ์ •์ˆ˜์˜ ์ˆœ์„œ์Œ A,B๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” A๋ฒˆ ๋ฌธ์ œ๋Š” B๋ฒˆ ๋ฌธ์ œ๋ณด๋‹ค
๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.ํ•ญ์ƒ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 1 ์ด์ƒ N ์ดํ•˜์˜ ์ •์ˆ˜๋“ค์„ ๋ฏผ์˜ค๊ฐ€ ํ’€์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์ƒ์ •๋ ฌ์„ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜์—ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ์กฐ๊ฑด์— ๋Œ€ํ•ด์„œ ์•ฝ๊ฐ„ ํ—ท๊ฐˆ๊ธธ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ์ˆœ์„œ๋Š” ์œ ์ง€ํ•˜๋˜, ๋น ๋ฅธ ์ˆซ์ž๋ถ€ํ„ฐ ํ‘ธ๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด n์ด 6, ์ˆœ์„œ์Œ A, B๋กœ 6 3๊ฐ€ ์ž…๋ ฅ๋๋‹ค๋ฉด 6 - > 3 ์ด ์ˆœ์„œ๋Š” ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ , ์‚ฌ์ด์— ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ๋œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—๋Š”  1 -> 2 -> 4 -> 5 -> 6 -> 3 ์ˆœ์„œ๊ฐ€ ์ •๋‹ต์ด๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import sys, heapq
input = sys.stdin.readline
 
def solve():
    n,m = map(int,input().split())
    edges = [0]*(n+1)
    graph = [[] for _ in range(n+1)]
    for _ in range(m):
        a,b = map(int,input().split())
        edges[b]+=1
        graph[a].append(b)
    topology(n, graph, edges)
 
def topology(n, graph, edges):
    ans = []
    h = []
    for i in range(1, n+1):
        if not edges[i]:
            heapq.heappush(h, i)
 
    while h:
        node = heapq.heappop(h)
        ans.append(node)
        for i in graph[node]:
            edges[i] -= 1
            if not edges[i]:
                heapq.heappush(h, i)
    print(*ans)
 
solve()
cs

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

๋ฆฌ๋ฒค์ง€ ์„ฑ๊ณต
ํŒŒ์ด์ฌ ์œ ์ €์ค‘ ๋‹น๋‹นํ•˜๊ฒŒ ์ผ๋“ฑ

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ๋ฌธ์ œ์ง‘

 

1766๋ฒˆ: ๋ฌธ์ œ์ง‘

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ˆ˜ N(1 ≤ N ≤ 32,000)๊ณผ ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‘ ์ •์ˆ˜์˜ ์ˆœ์„œ์Œ A,B๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ

www.acmicpc.net