๋ฌธ์ (์ถ์ฒ: 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๋ก๋ ๊ฐ ์ ์๋๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด์๋ค.
์๊ฐ๐ค
์๋ฉด์ ๊ตฌํํ ๋ ๋์น๋ ๋ถ๋ถ๋ค...
์ฌ์ค ํต๊ณผํ์ผ๋ฉด์๋ ๋ฑ ๋๋ฌธ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ๊ณ ๋ฏผํ์ง๋ง ๋ง๋๋ฏํ๋ค ใ ใ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 16948_๋ฐ์ค ๋์ดํธ (0) | 2022.04.15 |
---|---|
[Baekjoon] 2636_์น์ฆ (0) | 2022.04.13 |
[Baekjoon] 5014_์คํํธ๋งํฌ (0) | 2022.04.08 |
[Baekjoon] 11403_๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2022.04.07 |
[Baekjoon] 2583_์์ญ ๊ตฌํ๊ธฐ (0) | 2022.04.06 |