Zayson
A to Zayson!
Zayson
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • ์™„์ „ํƒ์ƒ‰(Brute-Force) (3)
      • ๊ทธ๋ฆฌ๋””(Greedy) (6)
      • ํˆฌํฌ์ธํ„ฐ(Two-Pointer) (1)
      • ๊ทธ๋ž˜ํ”„(Graph) (5)
      • BFS & DFS (9)
      • ๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜(Implementation) (5)
      • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • ํšŒ๊ณ  (5)
      • ์—”๋นต ํ”„๋กœ์ ํŠธ ํฌ์ŠคํŠธ ๋กœ๋“œ๋งต (1)
      • 2022๋…„ (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • ๊ธฐ์ˆ  ์„œ์  (6)
      • ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ (3)
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •๋ณตํ•ด์•ผํ•  ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ ๋””์ž์ธ ํŒจํ„ด (2)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • dfs
  • Java
  • spring boot
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • ๋ผ์ด๋ธŒ์Šคํ„ฐ๋””
  • ๋ฐฑ์ค€
  • CS
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์ž…๋ฌธ
  • ์—”๋นตํ”„๋กœ์ ํŠธ
  • kafka
  • BFS
  • JPA
  • ์™„์ „ํƒ์ƒ‰
  • Backend
  • ๊ตฌํ˜„
  • ๊ทธ๋ฆฌ๋””
  • ๋‚˜ ํ˜ผ์ž ์Šคํ”„๋ง๋ถ€ํŠธ!
  • SpringBoot
  • Computer science
  • Kafka Connect

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Zayson

A to Zayson!

[๋ฐฑ์ค€, Java] 2623๋ฒˆ : ์Œ์•…ํ”„๋กœ๊ทธ๋žจ
Algorithm/๊ทธ๋ž˜ํ”„(Graph)

[๋ฐฑ์ค€, Java] 2623๋ฒˆ : ์Œ์•…ํ”„๋กœ๊ทธ๋žจ

2022. 8. 9. 19:29

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

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

๐Ÿ˜ฎ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์œ„์ƒ ์ •๋ ฌ์„ ์ด์šฉํ•ด ์„œ๋กœ์˜ ์ˆœ์„œ๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

  1. ์ž…๋ ฅ์— ๋Œ€ํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. ์ž…๋ ฅ์— ๋Œ€ํ•ด ์ˆœ์„œ์— ๋”ฐ๋ผ indegree ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŒ…ํ•ด์ค€๋‹ค.
  3. ์œ„์ƒ ์ •๋ ฌ์„ ์ด์šฉํ•ด ์ˆœ์„œ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋‹ด์•„์ค€๋‹ค.
    1. ๋ฆฌ์ŠคํŠธ ์‚ฌ์ด์ฆˆ๊ฐ€ N๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ → 0์„ ๋ฐ˜ํ™˜
    2. ๊ทธ ์™ธ ์ˆœ์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿšฉ Java ์ฝ”๋“œ

package com.second.algorithm.baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main_2623_์Œ์•…ํ”„๋กœ๊ทธ๋žจ {
    private static int N, M;
    private static List<List<Integer>> graph;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        graph = new ArrayList<>();

        int[] indegree = new int[N + 1];
        for (int index = 0; index <= N; index++) {
            graph.add(new ArrayList<>());
        }

        // ์ˆœ์„œ ์ •๋ณด ์ €์žฅ
        for (int pd = 0; pd < M; pd++) {
            st = new StringTokenizer(br.readLine());
            int singerCount = Integer.parseInt(st.nextToken());
            int singer = 0;
            for (int index = 0; index < singerCount; index++) {
                int nextSinger = Integer.parseInt(st.nextToken());

                if (singer != 0) {
                    graph.get(singer).add(nextSinger);
                    indegree[nextSinger]++;
                }
                singer = nextSinger;
            }
        }

        int[] rst = startMusicBank(indegree);
        Arrays.stream(rst).forEach(System.out::println);
        br.close();
    }

    private static int[] startMusicBank(int[] indegree) {
        Queue<Integer> queue = new LinkedList<>();
        for (int singer = 1; singer <= N; singer++) {
            if (indegree[singer] == 0) queue.add(singer);
        }

        List<Integer> orders = new ArrayList<>();

        // ์œ„์ƒ ์ •๋ ฌ ์‹œ์ž‘
        while (!queue.isEmpty()) {
            Integer singer = queue.poll();
            orders.add(singer);
            for (Integer nextSinger : graph.get(singer)) {
                indegree[nextSinger]--;
                if(indegree[nextSinger] == 0) {
                    queue.add(nextSinger);
                }
            }
        }

        if(orders.size() < N) return new int[]{0};  // ๋ชจ๋“  ๊ฐ€์ˆ˜์˜ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ = size๊ฐ€ N ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ
        return orders.stream().mapToInt(Integer::intValue).toArray();   // List to Array
    }
}
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithm > ๊ทธ๋ž˜ํ”„(Graph)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, Java] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ  (0) 2022.08.09
[๋ฐฑ์ค€, Java] 1414๋ฒˆ : ๋ถˆ์šฐ์ด์›ƒ๋•๊ธฐ  (0) 2022.06.08
[๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ  (0) 2022.05.13
[๋ฐฑ์ค€, Java] 1707๋ฒˆ : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„  (0) 2022.04.27
    'Algorithm/๊ทธ๋ž˜ํ”„(Graph)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, Java] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ
    • [๋ฐฑ์ค€, Java] 1414๋ฒˆ : ๋ถˆ์šฐ์ด์›ƒ๋•๊ธฐ
    • [๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ
    • [๋ฐฑ์ค€, Java] 1707๋ฒˆ : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„
    Zayson
    Zayson
    ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”