๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/16948)
<๋ฐ์ค ๋์ดํธ>
๋ฌธ์
๊ฒ์์ ์ข์ํ๋ ํ๋ธ ๋ฌ๋ฒ๋ ์ฒด์ค์์ ์ฌ์ฉํ ์๋ก์ด ๋ง "๋ฐ์ค ๋์ดํธ"๋ฅผ ๋ง๋ค์๋ค. ๋ฐ์ค ๋์ดํธ๊ฐ ์๋ ๊ณณ์ด (r, c)๋ผ๋ฉด, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)๋ก ์ด๋ํ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ์ฒด์คํ๊ณผ ๋ ์นธ (r1, c1), (r2, c2)๊ฐ ์ฃผ์ด์ง๋ค. ๋ฐ์ค ๋์ดํธ๊ฐ (r1, c1)์์ (r2, c2)๋ก ์ด๋ํ๋ ์ต์ ์ด๋ ํ์๋ฅผ ๊ตฌํด๋ณด์. ์ฒด์คํ์ ํ๊ณผ ์ด์ 0๋ฒ๋ถํฐ ์์ํ๋ค.
๋ฐ์ค ๋์ดํธ๋ ์ฒด์คํ ๋ฐ์ผ๋ก ๋ฒ์ด๋ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฒด์คํ์ ํฌ๊ธฐ N(5 ≤ N ≤ 200)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ r1, c1, r2, c2๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฐ์ค ๋์ดํธ๊ฐ (r1, c1)์์ (r2, c2)๋ก ์ด๋ํ๋ ์ต์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํ๋ค. ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
if __name__=='__main__':
n=int(input()) # ์ฒด์คํ์ ํฌ๊ธฐ
x1,y1,x2,y2=map(int,sys.stdin.readline().split())
queue=deque([[x1,y1]])
dx=[-2,-2,0,0,2,2] # ์ด๋
dy=[-1,1,-2,2,-1,1]
visited=[[0] * n for i in range(n)] # ๋ฐฉ๋ฌธ ์ฌ๋ถ
cnt = [[-1] * n for i in range(n)] # ์ต์ ์ด๋ ํ์
visited[x1][y1]=1
cnt[x1][y1]=0 # ์์ ์์น
flag=0
while queue:
temp=queue.popleft()
for i in range(6):
x=temp[0]+dx[i]
y=temp[1]+dy[i]
if x>=0 and x<n and y>=0 and y<n: # ์ฒด์คํ ๋ฒ์ ์
if visited[x][y]==0: # ์์ง ๋ฐฉ๋ฌธ x
visited[x][y]=1 # ๋ฐฉ๋ฌธ
cnt[x][y]=cnt[temp[0]][temp[1]]+1 # ์ด๋ ํ์ +1
queue.append([x,y])
if x==x2 and y==y2: # ์ข
๋ฃ ์กฐ๊ฑด
flag=1
break
if flag==1:
break
print(cnt[x2][y2])
- my solution (JAVA)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class _16948_๋ฐ์ค๋์ดํธ {
public static void main(String[] args) throws IOException{
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(bf.readLine()); // ์ฒด์คํ์ ํฌ๊ธฐ
int x1=0;
int y1=0;
int x2=0;
int y2=0;
String s=bf.readLine();
for(int i=0; i<4; i++) {
x1=Integer.parseInt(s.split(" ")[0]);
y1=Integer.parseInt(s.split(" ")[1]);
x2=Integer.parseInt(s.split(" ")[2]);
y2=Integer.parseInt(s.split(" ")[3]);
}
Queue<int []>queue=new LinkedList<>();
int dx[]= {-2,-2,0,0,2,2}; // ์ด๋
int dy[]= {-1,1,-2,2,-1,1};
int visited[][]=new int[n][n]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ
int cnt[][]=new int[n][n]; // ์ต์ ์ด๋ ํ์
queue.add(new int[] {x1,y1});
visited[x1][y1]=1;
int flag=0;
while(queue.size()!=0) {
int temp[]=queue.poll();
for(int i=0; i<6; i++) {
int x=temp[0]+dx[i];
int y=temp[1]+dy[i];
if(x>=0 && x<n && y>=0 && y<n) { // ์ฒด์คํ ๋ฒ์ ์
if(visited[x][y]==0) { // ์์ง ๋ฐฉ๋ฌธ x
visited[x][y]=1; // ๋ฐฉ๋ฌธ
cnt[x][y]=cnt[temp[0]][temp[1]]+1; // ์ด๋ ํ์ +1
queue.add(new int[] {x,y});
}
if(x==x2 && y==y2) { // ์ข
๋ฃ ์กฐ๊ฑด
flag=1;
break;
}
}
}
if(flag==1) {
break;
}
}
if(cnt[x2][y2]==0) {
System.out.println(-1);
}else {
System.out.println(cnt[x2][y2]);
}
}
}
์ด๋ํ ์ ์๋ ๋งํผ ์ด๋ํ์ฌ ๋ฒ์ ํ์ธ ํ ์ฒด์คํ ๋ฒ์ ์์ด๋ผ๋ฉด ์ด๋ํ์ฌ ์ด๋ ํ์ +1์ ํด์ฃผ๋ฉด ํด๊ฒฐํ ์ ์์๋ค.
- n = ์ฒด์คํ ํฌ๊ธฐ
- x1, y1, x2 , y2 = ์์ ์์น, ์ด๋ํ๋ ค๋ ์์น
- dx, dy = ํ ๋ฒ์ ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ
- visited = ๋ฐฉ๋ฌธ ์ฌ๋ถ -> ์์ ์์น (x1, y1) = 1
- cnt = ์ด๋ ํ์ ์ ์ฅ -> ์์ ์์น (x1, y1) = 0
- flag = ์ข ๋ฃ ์กฐ๊ฑด
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ์ผ ์ฒ์ ๊ฐ์ pop -> ์ด๋ํ์ฌ ์ฒด์คํ ๋ฒ์ ์์ด๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด ๋ฐฉ๋ฌธ check ๋ฐ ์ด๋ ํ์ +1, queue ์ถ๊ฐ/ ์ด๋ํ ์์น์ ์ด๋ํด์ผ ํ๋ ์์น๊ฐ ๊ฐ๋ค๋ฉด ์ข ๋ฃ
- cnt [x2][y2] ์ถ๋ ฅ
์๊ฐ๐ค
๋ค๋ฅธ ๋ฌธ์ ํ๋ค๊ฐ.. ์ด๋ ค์์ ๋๋ง์ณ์๋ค.. ๐ฅ
๋ฌธ์ ํด๊ฒฐํด์ ๋๋ฌด ๋คํ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1926_๊ทธ๋ฆผ (0) | 2022.04.20 |
---|---|
[Baekjoon] 12851_์จ๋ฐ๊ผญ์ง 2 (0) | 2022.04.18 |
[Baekjoon] 2636_์น์ฆ (0) | 2022.04.13 |
[Baekjoon] 16928_๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2022.04.12 |
[Baekjoon] 5014_์คํํธ๋งํฌ (0) | 2022.04.08 |