dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • BFS
  • 프로그래머스 SQL
  • 반성
  • 일기
  • 네이버 부스트캠프
  • 부스트캠프
  • Hackerrank
  • 그래프탐색
  • 프로그래머스
  • c++
  • 회고
  • HackerRank mysql
  • 스프링
  • 서블릿
  • 백준
  • Baekjoon
  • 백준 DP
  • AI Tech
  • dp
  • 기록

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

문제 풀이/백준 알고리즘

[baekjoon 2623] 음악프로그램 (위상정렬) (C++)

2021. 7. 23. 00:53
728x90

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

 

2623번: 음악프로그램

첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한

www.acmicpc.net

입력값을 인접 그래프로 바꾼 뒤, 위상 정렬을 하면 되는 문제이다.

위상 순서가 여러 줄에 나눠서 주어지지만, 1 2 3을 1-2, 2-3으로 나눠서 생각해서 정리하면 된다.

(가수들끼리의 순서만 유지해서 정리하면 되므로)

또한, 정렬할 수 없을 때 0을 출력해야 하는 조건만 잘 구현해주면 쉽게 풀릴 것이다.

 

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int N, M, T, num, one, in[1001];
vector<int> v[1001], result;
queue<int> q;

void topologySort() {
	for (int i = 1; i <= N; i++) {
		if (in[i] == 0)
			q.push(i);
	}

	while (!q.empty()) {
		int x = q.front();
		q.pop();
		result.push_back(x);

		for (int i = 0; i < v[x].size(); i++) {
			int nx = v[x][i];
			in[nx]--;
			if (in[nx] == 0)
				q.push(nx);
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> N >> M;
	for (int i = 0; i < M; i++) {
		cin >> T;
		cin >> one;
		for (int j = 1; j < T; j++) {
			cin >> num;
			v[one].push_back(num);
			in[num]++;
			one = num;
		}
	}
	topologySort();

	if (result.size() == N) {
		for (auto c : result)
			cout << c << "\n";
	}
	else
		cout<<0;
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)

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

[baekjoon 11779] 최소비용 구하기2 (다익스트라) (C++)  (0) 2021.07.26
[baekjoon 16437] 양 구출 작전 (DFS, 트리) (C++)  (0) 2021.07.23
[baekjoon 2239] 스도쿠 (완전탐색, 백트래킹) (C++)  (0) 2021.07.21
[baekjoon 1516] 게임 개발 (위상정렬, DP) (C++)  (0) 2021.07.13
[baekjoon 1339] 단어 수학 (브루트포스, 그리디) (C++)  (0) 2021.07.12
    '문제 풀이/백준 알고리즘' 카테고리의 다른 글
    • [baekjoon 11779] 최소비용 구하기2 (다익스트라) (C++)
    • [baekjoon 16437] 양 구출 작전 (DFS, 트리) (C++)
    • [baekjoon 2239] 스도쿠 (완전탐색, 백트래킹) (C++)
    • [baekjoon 1516] 게임 개발 (위상정렬, DP) (C++)
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바