Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 서블릿
- 쓰레드 풀
- 2589
- 양꼬치
- 맛집 투어
- 2638
- 고모네 콩탕
- 포두부 보쌈
- Spring
- 호유동
- mvc
- 2839
- dp
- HTTP API
- 투어
- 스프링 MVC
- 다이나믹 프로그래밍
- 백준
- Servlet
- 1로 만들기
- 동적 프로그래밍
- 알고리즘
- 설탕 배달
- 프로그래머스
- 2020 KAKAO BLIND
- 완도산회
- 스프링
- 문자열 압축
- 맛집
- BFS
Archives
- Today
- Total
프로그래밍 공방
[백준] 2623번 : 음악 프로그램 본문
문제
문제해결방법
이 문제는 정해진 순서를 지키면서 가수들의 출연 순서를 정하는 문제였고 위상 정렬을 이용해서 풀었다.
코드
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | package baekjoon; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; import java.util.Queue; import java.util.StringTokenizer; public class Main2623_음악프로그램 { public static int N, M; public static int[] v; public static List<Integer>[] list; public static Queue<Integer> q = new ArrayDeque<>(); public static void bfs(int index) { Queue<Integer> bfsq = new ArrayDeque<>(); bfsq.add(index); q.add(index); v[index]--; while(!bfsq.isEmpty()) { int cur = bfsq.poll(); for(int i=0; i<list[cur].size(); i++) { int next = list[cur].get(i); v[next]--; if(v[next]==0) { bfsq.add(next); q.add(next); v[next]--; } } } } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); v = new int[N+1]; list = new List[N+1]; for(int i=1; i<=N; i++) list[i] = new ArrayList<Integer>(); for(int i=0; i<M; i++) { st = new StringTokenizer(br.readLine()); int c = Integer.parseInt(st.nextToken()); int before = Integer.parseInt(st.nextToken()); for(int j=1; j<c; j++) { int cur = Integer.parseInt(st.nextToken()); v[cur]++; list[before].add(cur); before = cur; } } for(int j=1; j<=N; j++) { if(v[j]==0) { bfs(j); } } boolean flag = false; for(int j=1; j<v.length; j++) { if(v[j]>0) { flag = true; break; } } if(flag) System.out.println("0"); else { while(!q.isEmpty()) System.out.println(q.poll()); } } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[프로그래머스] 징검다리 건너기 (0) | 2021.02.28 |
---|---|
[프로그래머스] 경주로 건설 (0) | 2021.02.28 |
[프로그래머스] 카드 짝 맞추기 (0) | 2021.02.21 |
[백준] 19235번 : 모노미노도미노 (0) | 2021.02.21 |
[백준] 19236번 : 청소년 상어 (0) | 2021.02.19 |