๐ ๋ฌธ์
๐ ์์ด๋์ด
์ค๋๋ง์ ํ์ด๋ณธ ์์์ ๋ ฌ ๋ฌธ์ ์์ต๋๋ค.
https://lahezy.tistory.com/40 (์ ๊ฐ ๊ณผ๊ฑฐ์ ์์ฑํ ์์์ ๋ ฌ ๊ด๋ จ ๊ธ์ ๋๋ค)
๊ธฐ์กด์ ์์์ ๋ ฌ๋ฌธ์ ์์ ์ฐจ์ด์ ์ ๊ฑด๋ฌผ์ ์ฌ๋ฌ ๊ฐ ๊ฑด์คํ ์ ์๊ณ ํ๊ดดํ ์ ์์ต๋๋ค.
์ฐ์ ์ ๋ ฅ์ผ๋ก x -> y์ ๋ํด์ y์ ๋ํ ์ง์ ์ฐจ์๋ฅผ +1 ์ํค๊ณ indegree [y]++
x์์ ๋๊ฐ๋ y์ ๋ํด์ ์ ์ฅํฉ๋๋ค. outGraph.get(x). add(y);
๋ชจ๋ ์ ๋ ฅ์ด ๋๋ ์ดํ์๋ ์คํํ ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ํ์ธํ๋ฉฐ ๊ฑฐ์ง๋ง์ ์น๋์ง ํ์ธํฉ๋๋ค.
- ๊ฑด์คํ๋ ๊ฒฝ์ฐ
- ์ฐ์ indegree๊ฐ 0์ธ์ง ํ์ธํ์ฌ ๊ฑด๋ฌผ์ ๊ฑด์คํ ์ ์๋์ง ํ์ธํฉ๋๋ค.
- ๋ง์ฝ indegree๊ฐ 0์ด๋ผ๋ฉด ํด๋น ๊ฑด๋ฌผ์ ๊ฑด์คํ๊ธฐ ์ํด ๋ง์กฑํด์ผ ํ ๋ค๋ฅธ ๊ฑด๋ฌผ๋ค์ด ๋ชจ๋ ๊ฑด์ค๋ ๊ฒ์ด๋ฏ๋ก ์ด๋ฒ ๊ฑด๋ฌผ์ ์ง์ ์ ์์ต๋๋ค.
- ์ฒ์ ๊ฑด์คํ๋ ๊ฑด๋ฌผ์ธ ๊ฒฝ์ฐ
- ํด๋น ๊ฑด๋ฌผ์ ๊ฑด์คํจ์ผ๋ก ์ธํ์ฌ์ง์ ์ ์๋ ๋ค์ ๊ฑด๋ฌผ๋ค์ ๋ํด indegree(์ง์ ์ฐจ์)๋ฅผ ํ๋ ๊ฐ์ ์์ผ์ค๋๋ค.
- ์ดํ์๋ ๊ทธ๋ฅ ๊ฑด๋ฌผ ๊ฐ์๋ง +1 ์์ผ์ฃผ๋ฉด ๋ฉ๋๋ค. (์ด๋ฏธ ๊ฑด๋ฌผ์ด ์๋ ๊ฒฝ์ฐ์๋ ์์์ ์ฒดํฌํด์ ํ์ธํ์ง ์๋๋ค)
- ํ๊ดดํ๋ ๊ฒฝ์ฐ
- ๊ฑด๋ฌผ์ด ๋ง์ฝ ํ ๊ฐ์ธ ๊ฒฝ์ฐ
- ํด๋น ๊ฑด๋ฌผ์ ๊ฑด์คํด์ผ๋ง ๊ฑด์คํ ์ ์๋ ๋ค์ ๊ฑด๋ฌผ๋ค์ ๋ํด์ indegree(์ง์ ์ฐจ์)๋ฅผ ํ๋์ฉ ์ฆ๊ฐ์์ผ ์ค๋๋ค.
- (ํด๋น ๊ฑด๋ฌผ์ด ์์ด์ผ๋ง ๋ค์๊ฑด๋ฌผ์ ๊ฑด์คํ ์ ์๋๋ฐ, ํด๋น ๊ฑด๋ฌผ์ด ํ๊ดด๋์ด ๋ค์๊ฑด๋ฌผ๋ค์ ๊ฑด์คํ์ง ๋ชปํ๋ ์ํญ ๊ณ ๋ ค)
- ์ดํ์๋ ๊ฑด๋ฌผ ๊ฐ์๋ง -1 ์์ผ์ฃผ๋ฉด ๋ฉ๋๋ค.
ํด๋น๋ฌธ์ ์์ Lier๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ํ์ธํด์ผ ํ ๊ฒ์ ๊ฑด์ค๋์ง ์์ ๊ฑด๋ฌผ์ ํ๊ดดํ๋ ค ํ๋ ๊ฒฝ์ฐ ํด๋น ๊ฑด๋ฌผ์ ๊ฑด์คํ ์ ์๋ ๊ฒฝ์ฐ์ธ๋ฐ ๊ฑด์คํ ๊ฒฝ์ฐ์ ๋๋ค. ํด๋น ๋ ๊ฐ์ง ๊ฒฝ์ฐ์๋ง ๋ผ์ด์ด ์์ ํ๋ณํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ์์ต๋๋ค.
๐ ํ์ด
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static StringTokenizer st;
private static final List<List<Integer>> outGraph = new ArrayList<>();
private static int[] inDegree;
private static int n;
private static int k;
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());//๊ฑด๋ฌผ ์ข
๋ฅ ๊ฐฏ์
int m = Integer.parseInt(st.nextToken());//๊ฑด๋ฌผ ์ฌ์ด ๊ด๊ณ์ ๊ฐ์
k = Integer.parseInt(st.nextToken()); //๊ฒ์ ์ ๋ณด์ ๊ฐ์
for (int i = 0; i < n; i++) {
outGraph.add(new ArrayList<>());
}
inDegree = new int[n];
//x๋ฅผ ๊ฑด์คํด์ผ y๋ฅผ ๊ฑด์ค ํ ์ ์์
while (m-- > 0) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
outGraph.get(x).add(y);
inDegree[y]++;
}
System.out.println(checkLier() ? "Lier!" : "King-God-Emperor");
}
private static boolean checkLier() throws IOException {
int[] buildings = new int[n];
while (k-- > 0) {
st = new StringTokenizer(br.readLine());
int cmd = Integer.parseInt(st.nextToken());
int index = Integer.parseInt(st.nextToken()) - 1;
if (cmd == 1) {
if (inDegree[index] != 0) {//๊ฑด๋ฌผ์ ์ง์ธ ์ ์๋์ง ํ์ธ
return true; //๊ฑด๋ฌผ ์ง์ง ๋ชปํ๋ค -> ๊ฑฐ์ง๋ง
}
buildings[index]++; //๊ฑด๋ฌธ์ ๊ฑด์คํ๋ค.
if (buildings[index] == 1) { //๊ฑด๋ฌผ์ด ํ๋๋ง ์ง์ด์ง ๊ฒฝ์ฐ์๋
for (int next : outGraph.get(index)) { //ํด๋น ๊ฑด๋ฌผ์ด ์ง์ด์ ธ์ ๊ฑด์คํ ์ ์๋ ๋ค์ ๊ฑด๋ฌผ๋ค
inDegree[next]--;
}
}
} else {
if (buildings[index] == 0) return true; //์ง์ด์ง์ง ์์ ๊ฑด๋ฌผ์ ๋ถ์๋ ค๊ณ ํจ
if (buildings[index] == 1) { //๊ฑด๋ฌผ์ด ํ๋๋ง ์์ ๋ ๋ถ์๋ ๊ฒฝ์ฐ ํด๋น ๊ฑด๋ฌผ์ด ์์ด์ผ ์กด์ฌํ ์ ์๋ ๊ฑด๋ฌผ๋ค์ ๋ํด์ ๋ค์ 1 ์ฆ๊ฐ
for (int next : outGraph.get(index)) {
inDegree[next]++;
}
}
buildings[index]--; //๊ฑด๋ฌผ์ ๋ถ์ ๋ค.
}
}
return false; //๊ฑฐ์ง๋ง์ ์น์ง ์์
}
}
'๋ฐฑ์ค(boj)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA]1002 ํฐ๋ , ๋ด์ ๊ณผ ์ธ์ (0) | 2023.06.23 |
---|---|
[JAVA]14567 ์ ์ ๊ณผ๋ชฉ (์์์ ๋ ฌ ์ ๋ฌธ ์ถ์ฒ) (0) | 2023.06.17 |
[JAVA]17299 ์ค๋ฑํฐ์(๊ณจ๋3, ์คํ) (0) | 2023.06.12 |
[JAVA]1958 LCS3(dp, ๊ณจ๋3) (0) | 2023.06.08 |
[JAVA]4803 ํธ๋ฆฌ, ๋ถ๋ฆฌ ์งํฉ (0) | 2023.06.03 |