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)

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

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

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

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

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

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

A to Zayson!

[๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ
Algorithm/๊ทธ๋ž˜ํ”„(Graph)

[๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ

2022. 5. 13. 11:55

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

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

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

๋ฌธ์ œ์˜ ์กฐ๊ฑด์—์„œ ์ตœ๋Œ€ 300,000๊ฐœ์˜ ๋„์‹œ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ช…์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ธ์ ‘ํ–‰๋ ฌ ๋ฐฉ์‹์ด ์•„๋‹Œ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค.

์‹œ์ž‘ ๋„์‹œ๋ถ€ํ„ฐ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋„์‹œ์— ๋Œ€ํ•ด ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ “๋‹ค์ต์ŠคํŠธ๋ผ"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ก , ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋„ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ ๋„์‹œ๊ฐ„ ๊ฑฐ๋ฆฌ๊ฐ€ 1๋กœ ๊ณ ์ •์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— BFS๋ฅผ ์ด์šฉํ•ด์„œ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ถœ๋ฐœ ๋„์‹œ๋ฅผ ์‹œ์ž‘์œผ๋กœ BFS๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  2. ์—ฐ๊ฒฐ๋œ ๋„์‹œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ณ , ํ˜„์žฌ ๋„์‹œ์—์„œ ๊ฑฐ๋ฆฌ์— +1 ํ•œ ๊ฐ’๋ณด๋‹ค ์—ฐ๊ฒฐ๋œ ๋„์‹œ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋‹ค๋ฉด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
  3. ์‹œ์ž‘ ๋„์‹œ๋กœ ๋ถ€ํ„ฐ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„์‹œ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ชจ๋‘ ๊ตฌํ•œ ๋’ค K๋ž‘ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๋„์‹œ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๋Š”๋‹ค.
  4. ๋ฆฌ์ŠคํŠธ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ด๋ผ๋ฉด, K ๊ฑฐ๋ฆฌ๋กœ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„์‹œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ด๋ฏ€๋กœ -1์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  5. ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•œ๋’ค ๋ฆฌํ„ดํ•œ๋‹ค.

์ถœ๋ ฅ ์กฐ๊ฑด์œผ๋กœ BufferedWriter๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ 50%์—์„œ ์ถœ๋ ฅ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๐Ÿšฉ Java ์ฝ”๋“œ

package com.algorithm.Baekjoon;

import java.io.*;
import java.util.*;

public class Main_18352_ํŠน์ •_๊ฑฐ๋ฆฌ์˜_๋„์‹œ_์ฐพ๊ธฐ {
    private static List<List<Integer>> graph;
    private static final int INF = (int) 1e9;

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

        int N = Integer.parseInt(st.nextToken());       // ๋„์‹œ (vertex)
        int M = Integer.parseInt(st.nextToken());       // ๋„๋กœ (edge)
        int K = Integer.parseInt(st.nextToken());       // ๋„๋‹ฌ ๊ฑฐ๋ฆฌ
        int X = Integer.parseInt(st.nextToken());       // ์‹œ์ž‘ ๋„์‹œ

        // ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
        graph = new ArrayList<>();
        for (int vertex = 0; vertex <= N; vertex++) {
            graph.add(new ArrayList<>());
        }

        // ๋„๋กœ ์—ฐ๊ฒฐ
        for (int edge = 0; edge < M; edge++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());

            graph.get(start).add(end);
        }

        int[] rst = getMinDistanceCity(N, K, X);

        // BufferedWriter ์•ˆ์“ฐ๋ฉด ์ถœ๋ ฅ ์ดˆ๊ณผ ์—๋Ÿฌ
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for (int city : rst) {
            bw.write(String.valueOf(city));
            bw.newLine();
        }
        bw.flush();
        br.close();
    }

    private static int[] getMinDistanceCity(int n, int k, int x) {
        Queue<Integer> pq = new LinkedList<>();
        boolean[] visited = new boolean[n + 1];
        int[] distance = new int[n + 1];
        Arrays.fill(distance, INF);

        pq.add(x);
        distance[x] = 0;        // ์‹œ์ž‘๋„์‹œ ๊ฑฐ๋ฆฌ 0
        visited[x] = true;      // ์‹œ์ž‘๋„์‹œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ

        while (!pq.isEmpty()) {
            int city = pq.poll();
            for (int next : graph.get(city)) {
                // ๊ฑฐ๋ฆฌ ๋น„๊ตํ•ด์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์ธ ๊ฒฝ์šฐ ๊ฐฑ์‹ 
                if (!visited[next] && distance[next] > distance[city] + 1) {
                    visited[next] = true;
                    distance[next] = distance[city] + 1;
                    pq.add(next);
                }
            }
        }

        // X ๋„์‹œ์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์ค‘ K์ธ ๋„์‹œ ๊ตฌํ•˜๊ธฐ
        List<Integer> rst = new ArrayList<>();
        for (int city = 1; city <= n; city++) {
            if (distance[city] == k) rst.add(city);
        }

        // K์ธ ๋„์‹œ ์—†์œผ๋ฉด return 0
        if (rst.size() < 1) return new int[]{-1};

        // ๋„์‹œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ๋ฆฌํ„ด
        Collections.sort(rst);
        return rst.stream().mapToInt(Integer::intValue).toArray();
    }
}
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

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

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

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