Skip to content

Commit 0c32b1a

Browse files
committed
위상 정렬 / 개념 외우자
1 parent b4aae8e commit 0c32b1a

2 files changed

Lines changed: 93 additions & 0 deletions

File tree

2252번 - 줄 세우기/Main.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
2+
/* ************************************************************************** */
3+
/* */
4+
/* ::: ::: ::: */
5+
/* Problem Number: 2252 :+: :+: :+: */
6+
/* +:+ +:+ +:+ */
7+
/* By: thxogh1 <boj.kr/u/thxogh1> +#+ +#+ +#+ */
8+
/* +#+ +#+ +#+ */
9+
/* https://boj.kr/2252 #+# #+# #+# */
10+
/* Solved: 2025/05/06 13:33:08 by thxogh1 ### ### ##.kr */
11+
/* */
12+
/* ************************************************************************** */
13+
import java.io.BufferedReader;
14+
import java.io.InputStreamReader;
15+
import java.util.ArrayDeque;
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
import java.util.Queue;
19+
import java.util.StringTokenizer;
20+
21+
public class Main {
22+
23+
public static void main(String[] args) throws Exception {
24+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
25+
StringTokenizer st = new StringTokenizer(br.readLine());
26+
StringBuilder sb = new StringBuilder();
27+
int n = Integer.parseInt(st.nextToken());
28+
int m = Integer.parseInt(st.nextToken());
29+
30+
List<List<Integer>> li = new ArrayList<>();
31+
int[] arr = new int[n + 1];
32+
for (int i = 0; i < n + 1; i++) {
33+
li.add(new ArrayList<>());
34+
}
35+
36+
for (int i = 0; i < m; i++) {
37+
st = new StringTokenizer(br.readLine());
38+
int f = Integer.parseInt(st.nextToken());
39+
int s = Integer.parseInt(st.nextToken());
40+
41+
li.get(f).add(s);
42+
arr[s] += 1;
43+
}
44+
45+
Queue<Integer> q = new ArrayDeque<>();
46+
for (int i = 1; i < n + 1; i++) {
47+
if (arr[i] == 0) {
48+
q.offer(i);
49+
}
50+
}
51+
while (!q.isEmpty()) {
52+
int now = q.poll();
53+
sb.append(now).append(' ');
54+
55+
for (int num : li.get(now)) {
56+
arr[num] -= 1;
57+
if (arr[num] == 0)
58+
q.offer(num);
59+
}
60+
}
61+
System.out.println(sb);
62+
}
63+
64+
}

2252번 - 줄 세우기/README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# 2252번: 줄 세우기 - <img src="https://static.solved.ac/tier_small/13.svg" style="height:20px" /> Gold III
2+
3+
<!-- performance -->
4+
5+
<!-- 문제 제출 후 깃허브에 푸시를 했을 때 제출한 코드의 성능이 입력될 공간입니다.-->
6+
7+
<!-- end -->
8+
9+
## 문제
10+
11+
[문제 링크](https://boj.kr/2252)
12+
13+
<p>N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다.</p>
14+
15+
<p>일부 학생들의 키를 비교한 결과가 주어졌을 때, 줄을 세우는 프로그램을 작성하시오.</p>
16+
17+
## 입력
18+
19+
<p>첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 횟수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이다.</p>
20+
21+
<p>학생들의 번호는 1번부터 N번이다.</p>
22+
23+
## 출력
24+
25+
<p>첫째 줄에 학생들을 앞에서부터 줄을 세운 결과를 출력한다. 답이 여러 가지인 경우에는 아무거나 출력한다.</p>
26+
27+
## 소스코드
28+
29+
[소스코드 보기](Main.java)

0 commit comments

Comments
 (0)