๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 16928_๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„

๋ฟŒ์•ผ._. 2022. 4. 12. 11:45

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/16928)

<๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„>

๋ฌธ์ œ 

 

๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„์„ ์ฆ๊ฒจํ•˜๋Š” ํ๋ธŒ ๋Ÿฌ๋ฒ„๋Š” ์–ด๋Š ๋‚  ๊ถ๊ธˆํ•œ ์ ์ด ์ƒ๊ฒผ๋‹ค.

์ฃผ์‚ฌ์œ„๋ฅผ ์กฐ์ž‘ํ•ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ตœ์†Œ ๋ช‡ ๋ฒˆ๋งŒ์— ๋„์ฐฉ์ ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๊ฒŒ์ž„์€ ์ •์œก๋ฉด์ฒด ์ฃผ์‚ฌ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฃผ์‚ฌ์œ„์˜ ๊ฐ ๋ฉด์—๋Š” 1๋ถ€ํ„ฐ 6๊นŒ์ง€ ์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์ ํ˜€์žˆ๋‹ค. ๊ฒŒ์ž„์€ ํฌ๊ธฐ๊ฐ€ 10 × 10์ด๊ณ , ์ด 100๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ๋ณด๋“œํŒ์—์„œ ์ง„ํ–‰๋œ๋‹ค. ๋ณด๋“œํŒ์—๋Š” 1๋ถ€ํ„ฐ 100๊นŒ์ง€ ์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์ ํ˜€์ ธ ์žˆ๋‹ค.

ํ”Œ๋ ˆ์ด์–ด๋Š” ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ๋‚˜์˜จ ์ˆ˜๋งŒํผ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”Œ๋ ˆ์ด์–ด๊ฐ€ i๋ฒˆ ์นธ์— ์žˆ๊ณ , ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ๋‚˜์˜จ ์ˆ˜๊ฐ€ 4๋ผ๋ฉด, i+4๋ฒˆ ์นธ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ๊ฐ€ 100๋ฒˆ ์นธ์„ ๋„˜์–ด๊ฐ„๋‹ค๋ฉด ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ๋„์ฐฉํ•œ ์นธ์ด ์‚ฌ๋‹ค๋ฆฌ๋ฉด, ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ํƒ€๊ณ  ์œ„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๋ฑ€์ด ์žˆ๋Š” ์นธ์— ๋„์ฐฉํ•˜๋ฉด, ๋ฑ€์„ ๋”ฐ๋ผ์„œ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ด๋™ํ•œ ์นธ์˜ ๋ฒˆํ˜ธ๋Š” ์›๋ž˜ ์žˆ๋˜ ์นธ์˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ํฌ๊ณ , ๋ฑ€์„ ์ด์šฉํ•ด ์ด๋™ํ•œ ์นธ์˜ ๋ฒˆํ˜ธ๋Š” ์›๋ž˜ ์žˆ๋˜ ์นธ์˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ์ž‘์•„์ง„๋‹ค.

๊ฒŒ์ž„์˜ ๋ชฉํ‘œ๋Š” 1๋ฒˆ ์นธ์—์„œ ์‹œ์ž‘ํ•ด์„œ 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒŒ์ž„ํŒ์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค์•ผ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„ํŒ์— ์žˆ๋Š” ์‚ฌ๋‹ค๋ฆฌ์˜ ์ˆ˜ N(1 ≤ N ≤ 15)๊ณผ ๋ฑ€์˜ ์ˆ˜ M(1 ≤ M ≤ 15)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์‚ฌ๋‹ค๋ฆฌ์˜ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•˜๋Š” x, y (x < y)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. x๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋ฉด, y๋ฒˆ ์นธ์œผ๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋ฑ€์˜ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•˜๋Š” u, v (u > v)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. u๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋ฉด, v๋ฒˆ ์นธ์œผ๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

1๋ฒˆ ์นธ๊ณผ 100๋ฒˆ ์นธ์€ ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ์˜ ์‹œ์ž‘ ๋˜๋Š” ๋์ด ์•„๋‹ˆ๋‹ค. ๋ชจ๋“  ์นธ์€ ์ตœ๋Œ€ ํ•˜๋‚˜์˜ ์‚ฌ๋‹ค๋ฆฌ ๋˜๋Š” ๋ฑ€์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋™์‹œ์— ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ํ•ญ์ƒ 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ 

 

100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์‚ฌ์œ„๋ฅผ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๊ตด๋ ค์•ผ ํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

 

 - my solution (Python)

import sys
from collections import deque

if __name__=='__main__':
    n,m=map(int,sys.stdin.readline().split()) # ์‚ฌ๋‹ค๋ฆฌ์˜ ์ˆ˜, ๋ฑ€์˜ ์ˆ˜

    info={}

    for i in range(n+m): # ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์ •๋ณด
        x,y=map(int,sys.stdin.readline().split())
        info[x]=y

    visited=[0]*101 # ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    depth=[0]*101 # ์ฃผ์‚ฌ์œ„

    queue=deque([1]) # 1๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘
    visited[1]=1
    dx=[1,2,3,4,5,6] # ์ฃผ์‚ฌ์œ„
    flag=0

    while queue:
        temp=queue.popleft()
        for i in dx: 
            x=temp+i
            if x<=100: # ๊ฒŒ์ž„ํŒ ๋ฒ”์œ„ ์•ˆ
                if visited[x]==0 : # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด
                    visited[x]=1
                    if x in info: # ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์žˆ๋‹ค๋ฉด
                        if visited[info[x]]==0: # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด
                            queue.append(info[x]) # ์ด๋™
                            visited[info[x]]=1 # ๋ฐฉ๋ฌธ
                            depth[info[x]]=depth[temp]+1 
                    else: # ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์—†๋‹ค๋ฉด
                        queue.append(x)
                        depth[x]=depth[temp]+1
                    if x==100: #  ์ข…๋ฃŒ
                        flag=1
        if flag==1:
            break

    print(depth[100])

 

- my solution (JAVA)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;

public class _16928_๋ฑ€๊ณผ์‚ฌ๋‹ค๋ฆฌ๊ฒŒ์ž„ {

	public static void main(String[] args) throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		
		String s=bf.readLine();
		int n=Integer.parseInt(s.split(" ")[0]); // ์‚ฌ๋‹ค๋ฆฌ์˜ ์ˆ˜
		int m=Integer.parseInt(s.split(" ")[1]); // ๋ฑ€์˜ ์ˆ˜
		
		HashMap<Integer, Integer> info=new HashMap<>();
		
		for(int i=0; i<n+m; i++) { // ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์ •๋ณด
			s=bf.readLine();
			int x=Integer.parseInt(s.split(" ")[0]);
			int y=Integer.parseInt(s.split(" ")[1]);
			info.put(x, y);
		}
		
		int visited[]=new int[101]; // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
		int depth[]=new int[101]; // ์ฃผ์‚ฌ์œ„
		
		Queue<Integer>queue=new LinkedList<>();
		queue.add(1); // 1๋ฒˆ ์นธ์—์„œ ์‹œ์ž‘
		visited[1]=1;
		int dx[]= {1,2,3,4,5,6}; // ์ฃผ์‚ฌ์œ„
		int flag=0;
		
		while(queue.size()!=0) {
			int temp=queue.poll();
			for(int i=0; i<6; i++) {
				int x=temp+dx[i];
				if (x<=100 && visited[x]==0) { // ๊ฒŒ์ž„ํŒ ๋ฒ”์œ„ ์•ˆ, ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด
					visited[x]=1;
					if(info.containsKey(x)) { // ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์กด์žฌ
						if(visited[info.get(x)]==0) { // ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด
							queue.add(info.get(x));
							visited[info.get(x)]=1;
							depth[info.get(x)]=depth[temp]+1;
						}
					}else { // ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์—†๋‹ค๋ฉด
						queue.add(x);
						depth[x]=depth[temp]+1;
					}
					if(x==100) { // ์ข…๋ฃŒ
						flag=1;
						break;
					}
				}
			}
			if(flag==1) { // ์ข…๋ฃŒ
				break;
			}
		}
		System.out.println(depth[100]);
	}
}

 

  • ์‚ฌ๋‹ค๋ฆฌ์˜ ์ˆ˜ n, ๋ฑ€์˜ ์ˆ˜ m ์ž…๋ ฅ
  • info = ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์ •๋ณด ์ €์žฅ
  • visited = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
  • depth = ์ฃผ์‚ฌ์œ„ ๊ตด๋ ค์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ ์ €์žฅ
  • dx = ์ฃผ์‚ฌ์œ„ 
  • queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์ œ์ผ ์ฒ˜์Œ ๊ฐ’์„ pop -> ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ์ด๋™ํ•˜์—ฌ ๊ฒŒ์ž„ํŒ ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๋ฐฉ๋ฌธ ->  ์‚ฌ๋‹ค๋ฆฌ๋‚˜ ๋ฑ€์ด ์žˆ์œผ๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ์‚ฌ๋‹ค๋ฆฌ, ๋ฑ€ ์œ„์น˜๋กœ ์ด๋™, ๋ฐฉ๋ฌธ, depth ์ €์žฅ but ์‚ฌ๋‹ค๋ฆฌ๋‚˜ ๋ฑ€์ด ์—†๋‹ค๋ฉด ๊ทธ ์œ„์น˜๋กœ ์ด๋™ ๋ฐ dpeth ์ €์žฅ -> ๊ฒŒ์ž„ํŒ 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋ฉด ์ข…๋ฃŒ
  • depth [100] ์ถœ๋ ฅ

 

โ“ ์ฒ˜์Œ์— ์™œ ํ‹€๋ ธ๋Š”๊ฐ€?

์‚ฌ๋‹ค๋ฆฌ๋‚˜ ๋ฑ€์ด ์žˆ์„ ๋•Œ ๋ฌด์กฐ๊ฑด ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ฝ”๋“œ ๊ตฌํ˜„ ์‹œ ์ด๋™ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์•ˆ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ 13, 25์™€ ๊ฐ™์ด ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด 13์— ์ด๋™ํ•˜์˜€์„ ๋•Œ ๋ฌด์กฐ๊ฑด 25๋กœ ๊ฐ€์•ผ ํ•˜๋Š”๋ฐ ์ฒ˜์Œ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์—์„œ๋Š” 13์—๋„ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ  25๋กœ๋„ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. 


์ƒ๊ฐ๐Ÿค”

 

์•Œ๋ฉด์„œ ๊ตฌํ˜„ํ•  ๋•Œ ๋†“์น˜๋Š” ๋ถ€๋ถ„๋“ค...

 

์‚ฌ์‹ค ํ†ต๊ณผํ–ˆ์œผ๋ฉด์„œ๋„ ๋ฑ€ ๋•Œ๋ฌธ์— ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ ๋งž๋Š”๋“ฏํ•˜๋‹ค ใ…Žใ…Ž