일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 가끔은_말로
- pytorch
- BFS
- 다익스트라
- 크루스칼
- DP
- lazy propagation
- 분할 정복
- 회고록
- 플로이드 와샬
- dfs
- 미래는_현재와_과거로
- 세그먼트 트리
- 백트래킹
- 알고리즘
- 이분 탐색
- 우선 순위 큐
- tensorflow
- 2023
- Overfitting
- 조합론
- 가끔은 말로
- NEXT
- object detection
- c++
- 너비 우선 탐색
- 자바스크립트
- dropout
- back propagation
- 문자열
Archives
- Today
- Total
Doby's Lab
백준 1516번: 게임 개발 (C++) 본문
https://www.acmicpc.net/problem/1516
1516번: 게임 개발
첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부
www.acmicpc.net
어떤 건물이 지어지기까지 특정한 건물이 지어져야 한다는 전제 조건이 존재한다.
즉 건물이 지어지는 데에 순서가 있다는 뜻이다.
"N개의 각 건물이 완성되기까지 걸리는 최소 시간을 출력한다."라고 되어있는데 여기서 오해를 하여 해석한 부분이 어떤 건물을 짓는데 걸리는 최소 시간으로 해석했다.
>> 즉, 최단 경로처럼 이해했다는 말이고, 이 문제는 "어떤 건물이 지어지기까지 특정한 건물이 지어져야 한다는 전제 조건" 다음을 만족시키면서 코드를 구현해야 한다.
오해했던 부분은 코드에 주석으로 달아두었다.
[AC 코드]
#include <iostream>
#include <vector>
#include <queue>
#define INF 50000001
using namespace std;
int n;
int inDegree[501];
int delay[501];
int dist[501];
vector<int> adj[501];
void topologicalSort() {
queue<int> q;
for (int i = 1; i <= n; i++) {
if (inDegree[i] == 0) {
dist[i] = delay[i];
q.push(i);
}
}
while (!q.empty()) {
int now = q.front();
q.pop();
for (int i = 0; i < adj[now].size(); i++) {
int next = adj[now][i];
// 이 부분을 원래 dist를 INF로 초기화시키고
// min 값으로 구하려 했었다.
// 각 건물들이 next라는 건물을 짓기 전에 지어야 한다면
// 그 모든 시간 중 가장 오래 걸리는 시간을 갱신해야 하므로
// dist가 0인 상태에서 시간들을 갱신해야 한다.
dist[next] = max(dist[next], dist[now] + delay[next]);
if (--inDegree[next] == 0) {
q.push(next);
}
}
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> delay[i];
int v;
while (true) {
cin >> v;
if (v == -1) break;
adj[v].push_back(i);
inDegree[i]++;
}
}
topologicalSort();
for (int i = 1; i <= n; i++) {
cout << dist[i] << '\n';
}
return 0;
}
728x90
'PS > BOJ' 카테고리의 다른 글
백준 1806번: 부분합 (C++) (0) | 2022.03.13 |
---|---|
백준 2003번: 수들의 합 2 (C++), 투 포인터 (0) | 2022.03.13 |
백준 2252번: 줄 세우기 (C++) (0) | 2022.03.09 |
백준 1005번: ACM Craft (C++) (0) | 2022.03.09 |
백준 14567번: 선수과목 (Prerequisite) (C++), 위상 정렬 (0) | 2022.03.07 |