๊ธฐ๋ก๋ฐฉ

BOJ_2252 : ์ค„ ์„ธ์šฐ๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_2252 : ์ค„ ์„ธ์šฐ๊ธฐ

Soom_1n 2023. 4. 22. 21:15

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2252๋ฒˆ: ์ค„ ์„ธ์šฐ๊ธฐ

์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ํ‚ค๋ฅผ ๋น„๊ตํ•œ ํšŒ์ˆ˜์ด๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ํ‚ค๋ฅผ ๋น„๊ตํ•œ ๋‘ ํ•™์ƒ์˜ ๋ฒˆํ˜ธ A, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” ํ•™์ƒ A๊ฐ€ ํ•™์ƒ B์˜ ์•ž์— ์„œ์•ผ ํ•œ๋‹ค๋Š” ์˜

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N๋ช…์˜ ํ•™์ƒ๋“ค์„ ํ‚ค ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šด๋‹ค.
    • ๋ชจ๋‘์˜ ํ‚ค ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‘ ํ•™์ƒ์„ ๋น„๊ตํ•ด์„œ ๋ˆ„๊ฐ€ ์•ž์— ์˜ค๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ์ฃผ์–ด์ง„๋‹ค.
  • ์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด๋‹ค.
    • ํ‚ค๊ฐ€ ํฐ ํ•™์ƒ์ด ์•ž์— ์˜ค๋Š”์ง€, ์ž‘์€ ํ•™์ƒ์ด ์•ž์— ์˜ค๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์—†๊ณ , ๋ˆ„๊ฐ€ ์•ž์œผ๋กœ ์˜ค๋Š๋ƒ๋งŒ ์ฃผ์–ด์ง„๋‹ค.
    • ๋”ฐ๋ผ์„œ ๋‹ต์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„œ๋ธŒํ…Œ์Šคํฌ ๋ฌธ์ œ์ด๋‹ค.
    • BFS๋กœ ๊ฐ„๋‹จํžˆ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] in_cnt = new int[N + 1];
        ArrayList<Integer>[] out_list = new ArrayList[N + 1];
        for (int i = 1; i <= N; i++) {
            out_list[i] = new ArrayList<>();
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int out = Integer.parseInt(st.nextToken());
            int in = Integer.parseInt(st.nextToken());
            in_cnt[in]++;
            out_list[out].add(in);
        }

        // BFS
        Queue<Integer> que = new ArrayDeque<>();
        for (int i = 1; i <= N; i++) {
            if (in_cnt[i] == 0)
                que.add(i);
        }

        StringBuilder sb = new StringBuilder();

        while (!que.isEmpty()) {
            int n = que.poll();
            sb.append(n).append(' ');

            for (int i : out_list[n]) {
                if (--in_cnt[i] == 0)
                    que.add(i);
            }
        }

        // Output
        sb.deleteCharAt(sb.length() - 1);
        System.out.print(sb);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • M๊ฐœ์˜ ํ‚ค ์ˆœ์„œ๋Š” ๋‹จ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  ์ •๋ณด์ด๋‹ค.
    • ๊ฐ„์„  ์ •๋ณด๋ฅผ out_list ์— ์ €์žฅํ•œ๋‹ค.
      (๋…ธ๋“œ์—์„œ ์ง„์ถœ ๋ฐฉํ–ฅ ์ •๋ณด๋งŒ ์ €์žฅ)
    • ์ด๋•Œ, ๊ฐ ๋…ธ๋“œ์˜ ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ in_cnt ๋ฐฐ์—ด์—์„œ ์นด์šดํŠธํ•œ๋‹ค.
  • ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋“ค์„ ํ์˜ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋„ฃ๋Š”๋‹ค. (์ด ์ค‘ ์•„๋ฌด ๋…ธ๋“œ๋‚˜ ์‹œ์ž‘์ด ๋  ์ˆ˜ ์žˆ๋‹ค)
  • ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • ํ์—์„œ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ ๊บผ๋‚ด๋ฉด  ์ถœ๋ ฅํ•ด์ค€๋‹ค.
    • ํ•ด๋‹น ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ ๋œ ๋…ธ๋“œ์˜ ์ง„์ž… ์ฐจ์ˆ˜ in_cnt๋ฅผ -1 ํ•œ๋‹ค.
    • in_cnt ๊ฐ€ 0์ด ๋œ ๊ฒฝ์šฐ์—” ํ์— ๋„ฃ์–ด์ค€๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์œ„์ƒ ์ •๋ ฌ์„ ๋– ์˜ฌ๋ ธ์ง€๋งŒ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•œ ํ›„ ๊ฑฐ์˜ ํ’€์–ด๋ณด์ง€ ์•Š์•„์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•œ ๊ธฐ๋ก์„ ๋ณด๊ณ  ๊ตฌํ˜„ํ–ˆ๋‹ค.
  • ๋ง‰์ƒ ํ’€์–ด๋ณด๋‹ˆ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•ด์„œ ๋‹ค์Œ์—” ์•ˆ๋ณด๊ณ  ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Lv.1 : ์ถ”์–ต ์ ์ˆ˜  (0) 2023.04.25
Lv.1 : ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ  (0) 2023.04.25
Lv.1 : ๋‘˜๋งŒ์˜ ์•”ํ˜ธ  (0) 2023.04.20
BOJ_2110 : ๊ณต์œ ๊ธฐ ์„ค์น˜  (0) 2023.04.18
BOJ_1806 : ๋ถ€๋ถ„ํ•ฉ  (0) 2023.04.18