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)

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

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

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

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

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

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

A to Zayson!

[๋ฐฑ์ค€, Java] 16928๋ฒˆ : ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„
Algorithm/BFS & DFS

[๋ฐฑ์ค€, Java] 16928๋ฒˆ : ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„

2022. 5. 9. 16:15

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

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

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

์ฃผ์‚ฌ์œ„๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฌธ์ œ์—์„œ ์ œ์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค ์œ„์น˜๋งˆ๋‹ค 1~6๋ฒˆ๊นŒ์ง€์˜ ์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์ง„ ํ›„ ์œ„์น˜๋ฅผ ๋‹ด์€ Node ๊ฐ์ฒด์— ๋‹ค์Œ ์œ„์น˜์™€ ๋‹ค์Œ ๊ฑฐ๋ฆฌ(์ฃผ์‚ฌ์œ„ ๋˜์ง„ ๊ฐœ์ˆ˜)๋ฅผ ๋„ฃ์–ด ํ์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

 

๋งค ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฐ ํ›„์˜ ์œ„์น˜์—์„œ๋Š” ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๋Š” ์นธ์ธ์ง€ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.

 

๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๋Š” ์นธ์ธ ๊ฒฝ์šฐ ์ฃผ์‚ฌ์œ„๋ฅผ ํ•œ๋ฒˆ ๊ตด๋ฆฐ ๊ฒƒ์œผ๋กœ ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ํƒ„ ์ดํ›„์˜ ์นธ์œผ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ํƒ„ ์ดํ›„ ์นธ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด์— ํ˜„์žฌ๊นŒ์ง€ ์œ„์น˜์˜ ์ฃผ์‚ฌ์œ„ ๊ฐœ์ˆ˜ + 1์„ ํ•œ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

 

๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์—†๋Š” ์นธ์ธ ๊ฒฝ์šฐ ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฐ ์ดํ›„์˜ ์นธ ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด์— ํ˜„์žฌ ๊นŒ์ง€์˜ ์ฃผ์‚ฌ์œ„ ๊ฐœ์ˆ˜ + 1 ํ•œ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

 

ํ˜„์žฌ ํ์˜ ์นธ์ด 100๋ฒˆ์งธ ์นธ์ด๋ฉด ๋„์ฐฉํ•œ ์นธ ์ด๋ฏ€๋กœ 100๋ฒˆ์งธ ๊ฑฐ๋ฆฌ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

  1. ์‚ฌ๋‹ค๋ฆฌ์™€ ๋ฑ€์˜ ์‹œ์ž‘๊ณผ ๋์€ Map์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
  2. ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๊ณ , ํ˜„์žฌ ํ์˜ ์œ„์น˜๊ฐ€ 100๋ฒˆ ์นธ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์— BFS ํƒ์ƒ‰ํ•œ๋‹ค.
  3. ์ฃผ์‚ฌ์œ„๋ฅผ 1-6๋ฒˆ ๊นŒ์ง€ ๊ตด๋ฆฐ๋‹ค.
  4. ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ํ›„์˜ ์œ„์น˜๊ฐ€ ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๋Š” ์นธ์ด๋ผ๋ฉด, ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ํ›„ ์œ„์น˜๊ฐ€ ์•„๋‹Œ ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ํƒ„ ์นธ์ด ์ฃผ์‚ฌ์œ„๋ฅผ ํ•œ๋ฒˆ ๊ตด๋ฆฐ ํ›„์˜ ์œ„์น˜์ด๋‹ค.
  5. ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ํ›„์˜ ์œ„์น˜๊ฐ€ ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์—†๋Š” ์นธ์ด๋ผ๋ฉด, ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ํ›„์œ„์น˜๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‹ค์Œ ์นธ ์œ„์น˜์ด๋‹ค.
  6. ๋ฐฉ๋ฌธํ•œ ์นธ ๊ฑฐ๋ฆฌ๋ณด๋‹ค ํ˜„์žฌ ์œ„์น˜์˜ ๊ฑฐ๋ฆฌ์—์„œ ํ•œ๋ฒˆ ์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์ง„ ๊ฐœ์ˆ˜ ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
  7. 100๋ฒˆ์งธ ์นธ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿšฉ Java ์ฝ”๋“œ

package com.algorithm.Baekjoon;

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

public class Main_16928_๋ฑ€๊ณผ_์‚ฌ๋‹ค๋ฆฌ_๊ฒŒ์ž„ {
    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());   // ์‚ฌ๋‹ค๋ฆฌ ๊ฐœ์ˆ˜
        int M = Integer.parseInt(st.nextToken());   // ๋ฑ€ ๊ฐœ์ˆ˜

        // ์‚ฌ๋‹ค๋ฆฌ์™€ ๋ฑ€ Map์œผ๋กœ ๊ด€๋ฆฌ
        Map<Integer, Integer> snakeAndLadder = new HashMap<>();
        for (int loop = 0; loop < N + M; loop++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            snakeAndLadder.put(start, end);
        }

        int rst = playGame(N, M, snakeAndLadder);
        System.out.println(rst);
        br.close();
    }

    private static int playGame(int n, int m, Map<Integer, Integer> snakeAndLadder) {
        boolean[] visited = new boolean[101];
        int[] distance = new int[101];
        PriorityQueue<Node> queue = new PriorityQueue<>();

        Arrays.fill(distance, INF);
        queue.add(new Node(1, 0));

        // ํ˜„์žฌ ์นธ์ด 100๋ฒˆ์งธ ์นธ์ด ์•„๋‹ˆ๋ฉด์„œ ํ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด
        while (!queue.isEmpty() && queue.peek().getNode() != 100) {
            Node position = queue.poll();

            if (visited[position.getNode()]) continue;
            visited[position.getNode()] = true;

            // ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ
            for (int dice = 1; dice <= 6; dice++) {
                int nextPosition = position.getNode() + dice;
                // ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ์นธ์ธ์ง€ ํ™•์ธ
                if (snakeAndLadder.containsKey(nextPosition)) {
                    if (!visited[snakeAndLadder.get(nextPosition)] && distance[snakeAndLadder.get(nextPosition)] > position.getDistance() + 1) {
                        // ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ํƒ„ ํ›„ ์นธ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ 
                        distance[snakeAndLadder.get(nextPosition)] = position.getDistance() + 1;
                        queue.add(new Node(snakeAndLadder.get(nextPosition), position.getDistance() + 1));
                    }
                }
                // ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ์นธ์ด ์•„๋‹˜
                // ๋‹ค์Œ ์นธ์ด 100๋ฒˆ์žฌ ์นธ ์ดํ•˜์ด๋ฉด์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ณ , ํ˜„์žฌ ๊ฑฐ๋ฆฌ + 1 ๋ณด๋‹ค ํ•ด๋‹น ์นธ ๊ฐœ์ˆ˜๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ
                else if (nextPosition <= 100 && !visited[nextPosition] && distance[nextPosition] > position.getDistance() + 1) {
                    distance[nextPosition] = position.getDistance() + 1;
                    queue.add(new Node(nextPosition, position.getDistance() + 1));
                }
            }
        }

        return distance[100];
    }

    static class Node implements Comparable<Node> {
        private int node;
        private int distance;

        public Node(int node, int distance) {
            this.node = node;
            this.distance = distance;
        }

        public int getNode() {
            return node;
        }

        public int getDistance() {
            return distance;
        }

        @Override
        public int compareTo(Node o) {
            return Integer.compare(this.distance, o.distance);
        }
    }
}
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithm > BFS & DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€, Java] 19621๋ฒˆ : ํšŒ์˜์‹ค ๋ฐฐ์ • 2  (0) 2022.05.23
[๋ฐฑ์ค€, Java] 9934๋ฒˆ : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ  (0) 2022.05.20
[๋ฐฑ์ค€, Java] 1967๋ฒˆ : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„  (0) 2022.05.08
[๋ฐฑ์ค€, Java] 1068๋ฒˆ : ํŠธ๋ฆฌ  (0) 2022.05.08
[๋ฐฑ์ค€, Java] 2573๋ฒˆ : ๋น™์‚ฐ  (0) 2022.05.02
    'Algorithm/BFS & DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋ฐฑ์ค€, Java] 19621๋ฒˆ : ํšŒ์˜์‹ค ๋ฐฐ์ • 2
    • [๋ฐฑ์ค€, Java] 9934๋ฒˆ : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
    • [๋ฐฑ์ค€, Java] 1967๋ฒˆ : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„
    • [๋ฐฑ์ค€, Java] 1068๋ฒˆ : ํŠธ๋ฆฌ
    Zayson
    Zayson
    ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

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