티스토리 뷰

728x90

문제 링크

https://www.acmicpc.net/problem/1005


"모든 건물을 지을 수 없는 경우는 없다."라는 조건에서 주어진 그래프가 싸이클 없는 방향 그래프(DAG)라는 걸 알 수 있다. 건물을 짓는 순서가 정해져 있으므로 위상정렬로 해결할 수 있다. 단순 BFS로는 풀기 힘들다. 



본문의 예제를 단계별로 살펴보자.

$x$번 건물이 완성될 때까지의 총 시간을 $d[x]$으로 표현하겠다. 아직 완성 시간을 알 수 없는 건물은 0의 값을 가진다.



$step\,0)$

초기상태이다.

$n$

 1

 2

 3

 4

$d$

 0

 0

 0

 0






$step\,1)$

우선 1번 건물을 먼저 지을 수 있고, 10초가 걸린다.

$n$

 1

 2

 3

 4

$d$

 10

 0

 0

 0






$step\,2)$

2번과 3번을 동시에 지을 수 있다.

1번 건물이 10초 만에 지어졌으므로 2번 건물은 $10 + 1 = 11$초, 3번 건물은 $10 + 100 = 110$초 만에 지어진다.

$n$

 1

 2

 3

 4

$d$

10

 11

 110

 0






$step\,3)$

2번 건물이 11초 만에 완성됐지만, 아직 3번 건물이 완성되지 않았으므로 4번 건물은 3번이 다 지어진 후에 지을 수 있다. 따라서 $110 + 10 = 120$초 만에 지어진다.

$n$

 1

 2

 3

 4

$d$

 10

 11

 110

 120




여기서 우리는 어떤 건물 $n$의 완성 시간을 구하기 위해 직전 단계에 필요한 건물들이 필요로 하는 총 시간 중, 가장 오래 걸리는 시간을 택해 $n$을 짓는데 걸리는 시간을 더해야 하는 것을 알 수 있다.




정답 코드


728x90

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[BOJ] 백준 5214 환승  (3) 2018.06.29
[BOJ] 백준 1008 A/B  (0) 2018.06.28
[BOJ] 백준 1004 어린 왕자  (0) 2018.06.28
[BOJ] 백준 1003 피보나치 함수  (0) 2018.06.28
[BOJ] 백준 2747 피보나치 수  (0) 2018.06.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함