[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋“ฑ์‚ฐ์ฝ”์Šค ์ •ํ•˜๊ธฐ

2023. 11. 8. 17:36ยท ๐€๐ฅ๐ ๐จ๐ซ๐ข๐ญ๐ก๐ฆ
๋ชฉ์ฐจ
  1. 1. Node ํด๋ž˜์Šค ์ •์˜
  2. 2. ์ถœ๋ฐœ์  ๊ธฐ์ค€์œผ๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ ์‹คํ–‰ํ•˜๊ธฐ
  3. 3. ์ „์ฒด ์ฝ”๋“œ

๋ฌธ์ œ ๋งํฌ: https://school.programmers.co.kr/learn/courses/30/lessons/118669


2022 ์นด์นด์˜ค ์ธํ„ด์‹ญ ๊ธฐ์ถœ์ด๋‹ค.

์ถœ์ž…๊ตฌ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์‚ฐ๋ด‰์šฐ๋ฆฌ ํ•œ ๊ณณ์„ ์ฐ์€ ๋’ค ์›๋ž˜์˜ ์ถœ์ž…๊ตฌ๋กœ ๋Œ์•„์™€์•ผ ํ•œ๋‹ค.

์ฃผ์–ด์ง„ ๊ฐ„์„ ๋“ค์€ ๋ชจ๋‘ ์–‘๋ฐฉํ–ฅ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฐ๋ด‰์šฐ๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ์™€ ์‚ฐ๋ด‰์šฐ๋ฆฌ์—์„œ ๋‚ด๋ ค์˜ฌ ๋•Œ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ , ํŽธ๋„ ์ฝ”์Šค์˜ ์ตœ์†Œ intensity๋งŒ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (์˜ฌ๋ผ๊ฐˆ ๋•Œ์˜ intensity) < (๋‚ด๋ ค์˜ฌ ๋•Œ์˜ intensity) ๋ผ๋ฉด, ์˜ฌ๋ผ๊ฐ„ ์ฝ”์Šค ๊ทธ๋Œ€๋กœ ๋‚ด๋ ค์˜ค๋Š” ๊ฒƒ์ด ๋” ์ด๋“์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ์‚ฐ๋ด‰์šฐ๋ฆฌ๋ฅผ ์ถœ๋ฐœ์ ์œผ๋กœ ์žก๊ณ , ๋‚ด๋ ค์˜ฌ ๋•Œ ๊ธฐ์ค€์œผ๋กœ intensity๋ฅผ ๊ตฌํ–ˆ๋‹ค.

์ถœ๋ฐœ์ ์—์„œ ์ตœ์†Œ intensity๋ฅผ ๊ฐ–๋Š” ์ถœ์ž…๊ตฌ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๊ณ , ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
์ผ๋ฐ˜์ ์ธ ๋‹ค์ต์ŠคํŠธ๋ผ๋Š” ๊ฑฐ๋ฆฌ = (๊ฐ„์„  ๊ฐ€์ค‘์น˜์˜ ๋ˆ„์ ํ•ฉ)์ด์ง€๋งŒ, ์—ฌ๊ธฐ์„œ์˜ ๊ฑฐ๋ฆฌ๋Š” ๊ฐ„์„  ๊ฐ€์ค‘์น˜์˜ ์ตœ๋Œ“๊ฐ’์ด ๋œ๋‹ค.


1. Node ํด๋ž˜์Šค ์ •์˜

class Node implements Comparable<Node> {
    int idx;
    int dist;
    public Node(int idx, int dist) {
        this.idx = idx;
        this.dist = dist;
    }
    public int compareTo(Node o) {
        return this.dist - o.dist;
    }
}

 

๋จผ์ € (๋…ธ๋“œ ๋ฒˆํ˜ธ, intensity์˜ ์ตœ๋Œ“๊ฐ’)์„ ์ €์žฅํ•˜๋Š” Node ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•ด์ฃผ์—ˆ๋‹ค. PriorityQueue

 


2. ์ถœ๋ฐœ์  ๊ธฐ์ค€์œผ๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ ์‹คํ–‰ํ•˜๊ธฐ

๊ฐ ์‚ฐ๋ด‰์šฐ๋ฆฌ๋ฅผ ์ถœ๋ฐœ์ ์œผ๋กœ ์‚ผ์•„, ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
Priority Queue๋ฅผ ์ด์šฉํ•ด intensity๊ฐ€ ์ตœ์†Œ์ธ ๋…ธ๋“œ๋ฅผ ์šฐ์„  ํƒ์ƒ‰ํ–ˆ์œผ๋ฏ€๋กœ, ์ถœ์ž…๊ตฌ์— ๋„์ฐฉํ•˜๋ฉด ํ•ด๋‹น ์ฝ”์Šค๊ฐ€ ์ตœ์†Œ intensity๋ฅผ ๊ฐ–๋Š” ์ฝ”์Šค๊ฐ€ ๋œ๋‹ค.

 


int N; // N = n

// graph[i]: i๋ฒˆ ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” List
// isGate[i]: i๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์ถœ์ž…๊ตฌ ๋…ธ๋“œ๋ฉด true
// isSummit[i]: i๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ๋ฉด true
List<Node>[] graph;
boolean[] isGate, isSummit;

int findCourse(int start) {
    // ์‹œ์ž‘ ๋…ธ๋“œ ๊ธฐ์ค€์œผ๋กœ, i๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€๋Š” ์ฝ”์Šค์˜ ๊ฑฐ๋ฆฌ(=intensity ์ค‘ ์ตœ๋Œ“๊ฐ’) ์ €์žฅ
    int[] intensity = new int[N+1];
    Arrays.fill(intensity, Integer.MAX_VALUE);
    PriorityQueue<Node> pq = new PriorityQueue<>();

    pq.add(new Node(start, 0));
    intensity[start] = 0;
    while(!pq.isEmpty()) {
        Node now = pq.poll();

        // ์ถœ์ž…๊ตฌ ๋…ธ๋“œ์— ๋„์ฐฉํ•˜๋ฉด ํ•˜์‚ฐ ์ข…๋ฃŒ -> ์ง€๋‚˜์˜จ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜ ์ค‘ ์ตœ๋Œ“๊ฐ’ ๋ฐ˜ํ™˜
        if(isGate[now.idx]) return now.dist;

        // ์ถœ๋ฐœ์ ์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ๋Š” ๋ฐฉ๋ฌธ ๋ถˆ๊ฐ€ํ•˜๋ฏ€๋กœ skip
        if(now.idx!=start && isSummit[now.idx]) continue;

        for (Node next : graph[now.idx]) {
            int nextIntensity = Math.max(now.dist, next.dist);

            if(intensity[next.idx] <= nextIntensity) continue;

            pq.add(new Node(next.idx, nextIntensity));
            intensity[next.idx] = nextIntensity;
        }
    }

    // ์ถœ์ž…๊ตฌ๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์ด ์—†๋Š” ์‚ฐ๋ด‰์šฐ๋ฆฌ์ธ ๊ฒฝ์šฐ MAX_VALUE๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋‹ต์ด ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
    return Integer.MAX_VALUE;
}

 


3. ์ „์ฒด ์ฝ”๋“œ

import java.util.*;

class Node implements Comparable<Node> {
    int idx;
    int dist;
    public Node(int idx, int dist) {
        this.idx = idx;
        this.dist = dist;
    }
    public int compareTo(Node o) {
        return this.dist - o.dist;
    }
}
class Solution {
    int N;
    List<Node>[] graph;
    boolean[] isGate, isSummit;
    public int[] solution(int n, int[][] paths, int[] gates, int[] summits) {
        int[] answer = new int[2];
        N = n;
        graph = new ArrayList[N+1];
        isGate = new boolean[N+1];
        isSummit = new boolean[N+1];
        Arrays.sort(summits);

        for (int i=1; i<=N; i++) {
            graph[i] = new ArrayList<>();
        }
        for (int i=0; i<gates.length; i++) {
            isGate[gates[i]] = true;
        }
        for (int i=0; i<summits.length; i++) {
            isSummit[summits[i]] = true;
        }

        for (int i=0; i<paths.length; i++) {
            int a = paths[i][0];
            int b = paths[i][1];
            graph[a].add(new Node(b, paths[i][2]));
            graph[b].add(new Node(a, paths[i][2]));
        }

        int minIntensity = Integer.MAX_VALUE;
        int summitIdx = 0;
        for (int i=0; i<summits.length; i++) {
            int intensity = findCourse(summits[i]);
            if(minIntensity > intensity) {
                minIntensity = intensity;
                summitIdx = summits[i];
            }
        }

        answer[0] = summitIdx;
        answer[1] = minIntensity;

        return answer;
    }

    int findCourse(int start) {
        int[] intensity = new int[N+1];
        Arrays.fill(intensity, Integer.MAX_VALUE);
        PriorityQueue<Node> pq = new PriorityQueue<>();

        pq.add(new Node(start, 0));
        intensity[start] = 0;
        while(!pq.isEmpty()) {
            Node now = pq.poll();

            if(isGate[now.idx]) return now.dist;
            if(now.idx!=start && isSummit[now.idx]) continue;

            for (Node next : graph[now.idx]) {
                int nextIntensity = Math.max(now.dist, next.dist);
                if(intensity[next.idx] <= nextIntensity) continue;
                pq.add(new Node(next.idx, nextIntensity));
                intensity[next.idx] = nextIntensity;
            }
        }

        return Integer.MAX_VALUE;
    }
}

'๐€๐ฅ๐ ๐จ๐ซ๐ข๐ญ๐ก๐ฆ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋„๋‘‘์งˆ ์‹œ๊ฐ„์ดˆ๊ณผ ํ•ด๊ฒฐ ํ›„๊ธฐ  (0) 2024.02.21
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฒฝ์‚ฌ๋กœ์˜ ๊ฐœ์ˆ˜  (0) 2023.11.12
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ‘œ ๋ณ‘ํ•ฉ  (0) 2023.09.10
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์–‘๊ณผ ๋Š‘๋Œ€  (0) 2023.09.07
[๋ฐฑ์ค€ 5052] ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก  (0) 2023.09.04
  1. 1. Node ํด๋ž˜์Šค ์ •์˜
  2. 2. ์ถœ๋ฐœ์  ๊ธฐ์ค€์œผ๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ ์‹คํ–‰ํ•˜๊ธฐ
  3. 3. ์ „์ฒด ์ฝ”๋“œ
'๐€๐ฅ๐ ๐จ๐ซ๐ข๐ญ๐ก๐ฆ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋„๋‘‘์งˆ ์‹œ๊ฐ„์ดˆ๊ณผ ํ•ด๊ฒฐ ํ›„๊ธฐ
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฒฝ์‚ฌ๋กœ์˜ ๊ฐœ์ˆ˜
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ‘œ ๋ณ‘ํ•ฉ
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์–‘๊ณผ ๋Š‘๋Œ€
gorapaduckoo
gorapaduckoo
gorapaduckoo
์ง„ํ™”์˜ ๋Œ
gorapaduckoo
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐€๐ฅ๐ ๐จ๐ซ๐ข๐ญ๐ก๐ฆ
    • ๐‚๐’
      • ๐‰๐š๐ฏ๐š
      • ๐ƒ๐š๐ญ๐š๐›๐š๐ฌ๐ž
      • ๐๐ž๐ญ๐ฐ๐จ๐ซ๐ค
      • ๐„๐ญ๐œ.
    • ๐’๐ฉ๐ซ๐ข๐ง๐ 
      • ๐๐š๐ฌ๐ข๐œ
      • ๐Œ๐•๐‚ (๐Ÿ)
      • ๐’๐ž๐œ๐ฎ๐ซ๐ข๐ญ๐ฒ
    • ๐๐ซ๐จ๐ฃ๐ž๐œ๐ญ๐ฌ
      • ๐‘๐ž๐œ๐จ๐ฎ๐ซ๐ญ๐š
      • ๐’๐ข๐ฅ๐ญ๐š๐ซ๐š๐ž
    • ๐†๐ข๐ญ
    • ๐‘๐ž๐ฏ๐ข๐ž๐ฐ
    • ๐’๐ญ๐ฎ๐๐ฒ

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

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

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • Union-FInd
  • ์—๋“œ๋ชฌ๋“œ-์นดํ”„
  • ๋น„ํŠธ๋งˆ์Šคํ‚น
  • BOJ
  • ๋ฝ
  • dp
  • ํŠธ๋ฆฌ
  • Spring ๊ธฐ๋ณธํŽธ
  • ๊ตฌํ˜„
  • DI
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • DFS
  • spring
  • spring mvc
  • http
  • OOP
  • ๋ธŒ๋ฃจํŠธํฌ์Šค
  • aop
  • ๋„คํŠธ์›Œํฌ
  • CS
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • IOC
  • mvc ํŒจํ„ด
  • web
  • ๋ฐฑ์ค€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
gorapaduckoo
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋“ฑ์‚ฐ์ฝ”์Šค ์ •ํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.