-
2623번 음악프로그램 | Baekjoon BOJ 백준 2623 C++ 코드, 해설, 풀이[백준 알고리즘]/[C++] 2021. 1. 19. 15:00728x90반응형
이번 포스팅은 백준 2623번 음악프로그램입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
위상 정렬 Topological Sort
참고
line 10
vector<int> v[1002];
배열을 원소로 하는 벡터
line 16-30
v[index]에는 바로 뒤에 오는 항목만 넣는다.
1 → 4 → 3
v[1]=4, v[4]=3
v[1]={4, 3}런타임 에러 (OutOfBounds) 발생?
더보기발생 이유
배열의 크기를 충분히 잡아주지 않았다.
int inDeg[1000] = { 0, };
vector<int> v[1000];
int inDeg[1002] = { 0, };
vector<int> v[1002];
런타임 에러 (OutOfBounds) 해결 전체 코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465//백준2623 음악프로그램#include <iostream>#include <vector>#include <queue>using namespace std;int N, M; //가수 수, PD 수int inDeg[1002] = { 0, }; //진입차수(=선행 노드 수)vector<int> v[1002];vector<int> ans; //출력저장벡터int main() {cin >> N >> M;while (M--) {int sNum;int s1, s2;cin >> sNum;if (sNum == 0) continue;cin >> s1;if (sNum == 1) continue;for (int i = 0; i < sNum-1; i++) {cin >> s2;v[s1].push_back(s2);inDeg[s2]++;s1 = s2;}}queue<int> q;for (int i = 1; i <= N; i++) {if (inDeg[i] == 0) {q.push(i);}}while (!q.empty()) {int s = q.front();q.pop();ans.push_back(s);for (int i = 0; i < v[s].size(); i++) {int next = v[s][i];inDeg[next]--;if (inDeg[next] == 0) {q.push(next);}}}if (ans.size() != N) {cout << 0 << endl;return 0;}else {for (int i = 0; i < N; i++) {cout << ans[i] << endl;}}return 0;}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
2998번 8진수 | Baekjoon BOJ 백준 2998 C++ 코드, 해설, 풀이 (0) 2021.01.21 13915번 현수의 열기구 교실 | Baekjoon BOJ 백준 13915 C++ 코드, 해설, 풀이 (0) 2021.01.20 1541번 잃어버린 괄호 | Baekjoon BOJ 백준 1541 C++ 코드, 해설, 풀이 (0) 2021.01.19 11653번 소인수분해 | Baekjoon BOJ 백준11653 C++ 코드, 해설, 풀이 (0) 2021.01.18 1094번 막대기 | Baekjoon BOJ 백준1094 C++ 코드, 해설, 풀이 (0) 2021.01.18