๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 7562 ๋‚˜์ดํŠธ์˜ ์ด๋™ (ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 7. 11.

๐ŸŽˆ๋ฌธ์ œ

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

 

๐ŸŽ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜?

1. ์›€์ง์—ฌ์•ผํ•˜๋Š” '์ตœ์†Œ ํšŸ์ˆ˜'๋ฅผ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ ๋‹น์—ฐํžˆ BFS๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

2. ์ƒํ•˜์ขŒ์šฐ ์›€์ง์ž„์„ ๊ณ ๋ คํ•ด์ฃผ๋ฉด ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ BFS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‚˜์ดํŠธ์˜ ์›€์ง์ž„์„ ๊ณ ๋ คํ•ด์ค˜์•ผ ํ•œ๋‹ค.

3. ๋‚˜๋จธ์ง€๋Š” ๋‹ค๋ฅธ ์‰ฌ์šด bfs๋ฌธ์ œ๋“ค๊ณผ ๋‹ค๋ฅผ๋ฐ”๊ฐ€ ์—†๋‹ค.

 

๐Ÿ’ป์ฝ”๋“œ

#7562 ๋‚˜์ดํŠธ์˜ ์ด๋™
from collections import deque

# 2. bfs
def bfs(x,y):
    board[x][y] = 0 # ์ดˆ๊ธฐ ๋‚˜์ดํŠธ์˜ ์œ„์น˜ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
    deq = deque()
    deq.append([x,y])
    dx = [-2,-1,1,2,2,1,-1,-2]  # ๋‚˜์ดํŠธ์˜ ์›€์ง์ž„ ์ขŒํ‘œ
    dy = [1,2,2,1,-1,-2,-2,-1]
    while deq:
        x,y = deq.popleft()
        if board[tar_i][tar_j] != -1:   # ํƒˆ์ถœ ์กฐ๊ฑด
                print(board[tar_i][tar_j])
                return
        for i in range(8):  # 8๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ๊ฐ ๋Œ์•„๋ณด๊ธฐ์œ„ํ•œ for๋ฌธ
            nx = x + dx[i]
            ny = y + dy[i]
            # board ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋ฉด ๋ฐ‘์˜ ์ฝ”๋“œ ์‹คํ–‰ x
            if nx < 0 or nx > (l-1) or ny < 0 or ny > (l-1):
                continue
            if board[nx][ny] == -1: # ๋‚˜์ดํŠธ๊ฐ€ ํ•œ๋ฒˆ๋„ ์˜ค์ง€ ์•Š์€ ์ขŒํ‘œ๋ฉด
                board[nx][ny] = board[x][y] + 1 # ์ขŒํ‘œ์— ๋‚˜์ดํŠธ์˜ ์›€์ง์ธ ํšŸ์ˆ˜ +1
                deq.append([nx,ny])
    return


# 1. input
t = int(input())    # test case
for _ in range(t):
    l = int(input())    # ์ฒด์ŠคํŒ ํ•œ ๋ณ€์˜ ํฌ๊ธฐ
    board = [[-1 for j in range(l)] for i in range(l)]
    now_i,now_j = map(int,input().split())  # ๋‚˜์ดํŠธ ์ดˆ๊ธฐ ์œ„์น˜
    tar_i,tar_j = map(int,input().split())  # ๋‚˜์ดํŠธ ๋ชฉํ‘œ ์œ„์น˜
    bfs(now_i,now_j)    # ํƒ์ƒ‰

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

1. bfs(now_i, now_j)์™€ ๊ฐ™์ด ๋‚˜์ดํŠธ์˜ ์ดˆ๊ธฐ ์œ„์น˜๋งŒ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ด์œ ๋Š” ๋‚˜์ดํŠธ์˜ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‚˜์ดํŠธ์˜ ๋ชฉํ‘œ ์œ„์น˜๋Š” ๋ฐ”๋€Œ๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์œผ๋กœ ๋‚˜์ดํŠธ์˜ ์ดˆ๊ธฐ ์œ„์น˜๋งŒ์„ ๋ฐ›๋„๋ก ํ–ˆ๋‹ค.

 

2. bfs ๋ฌธ์ œ๋ฅผ ๋ช‡ ๋ฒˆ ํ’€์–ด๋ดค๋‹ค๋ฉด ๋‚˜์ดํŠธ์˜ ์›€์ง์ž„์„ ๊ณ ๋ คํ•˜์—ฌ dx, dy ๋ณ€์ˆ˜์— ์ ์ ˆํ•œ ๊ฐ’์„ ๋„ฃ์–ด ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด ๋ถ€๋ถ„์ด ํ—ท๊ฐˆ๋ฆฐ๋‹ค๋ฉด https://chjcoder.tistory.com/2 ์ด ๋ฌธ์ œ์™€ ๊ฐ™์ด ์ƒํ•˜์ขŒ์šฐ ์›€์ง์ž„๋งŒ์„ ๊ณ ๋ คํ•˜๋Š” bfs ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์ž. 

 

3. ์ขŒํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.