๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 7107_Journey of A Knight

๋ฟŒ์•ผ._. 2025. 2. 3. 17:10
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/7107)

< Journey of A Knight >

 

๋ฌธ์ œ ํ’€์ด 

 

bfs๋ฅผ ํ™œ์šฉํ•ด (i, j) ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 my solution (Java)

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

public class _7107_ { // Journey of A Knight
	static int dx[] = { -1, -2, -2, -1, 1, 2, 2, 1 };
	static int dy[] = { -2, -1, 1, 2, 2, 1, -1, -2 };
    
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
        
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		int i = Integer.parseInt(st.nextToken()) - 1;
		int j = m - Integer.parseInt(st.nextToken());
        
		boolean arr[][] = new boolean[m][n];
		int x = m - 1, y = 0;
		arr[x][y] = true;
        
		Queue<int[]> queue = new LinkedList<>();
		queue.add(new int[] { x, y, 0 });
        
		boolean flag = false;
		int result = -1;
		while (!queue.isEmpty()) {
			int temp[] = queue.poll();
			for (int k = 0; k < 8; k++) {
				x = temp[0] + dx[k];
				y = temp[1] + dy[k];
				if (x >= 0 && x < m && y >= 0 && y < n && !arr[x][y]) {
					if (x == j && y == i) {
						flag = true;
						result = temp[2] + 1;
						break;
					}
					arr[x][y] = true;
					queue.add(new int[] { x, y, temp[2] + 1 });
				}
			}
			if (flag) {
				break;
			}
		}
        
		if (result != -1) {
			System.out.println(result);
		} else {
			System.out.println("NEVAR");
		}
	}
}

 

๋ณ€์ˆ˜)
dx, dy : ์ด๋™ ๋ฐฉํ–ฅ
n, m : ๋ฐฐ์—ด ํฌ๊ธฐ
i, j : ๋„์ฐฉ ์œ„์น˜
arr : ๋ฐฐ์—ด
x, y : ํ˜„์žฌ ์œ„์น˜
flag : ๋„์ฐฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€
result : ๋„์ฐฉ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ํšŸ์ˆ˜

 

๋ฐฐ์—ด ํฌ๊ธฐ n, m๊ณผ ๋„์ฐฉ ์œ„์น˜ i, j๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์ถœ๋ฐœ ์œ„์น˜๋ฅผ (m-1, 0)์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฐฐ์—ด ๊ฐ’์„ true๋กœ ์ €์žฅํ•œ๋‹ค. Queue์— ์‹œ์ž‘ ์œ„์น˜์™€ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•œ ๋’ค queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) queue poll

2) 8๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ํ›„ ๋ฐฐ์—ด ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋ฐ queue์— ์ถ”๊ฐ€

3) ๋งŒ์•ฝ ์ด๋™ํ•œ ์œ„์น˜๊ฐ€ ๋„์ฐฉ ์œ„์น˜๋ผ๋ฉด ์ข…๋ฃŒ

 

result ๊ฐ’์ด -1์ด ์•„๋‹ˆ๋ผ๋ฉด result ์ถœ๋ ฅ, -1์ด๋ผ๋ฉด "NEVAR" ์ถœ๋ ฅ



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 4351_Hay Points  (1) 2025.02.05
[Baekjoon] 6513_Deli Deli  (1) 2025.02.04
[Baekjoon] 5093_Letter Replacement  (1) 2025.01.24
[Baekjoon] 31047_Warehouse  (1) 2025.01.23
[Baekjoon] 9357_Eligibility  (1) 2025.01.22