We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™ - ํŒŒ์ด์ฌ

Redddy 2022. 5. 31. 23:00

๐Ÿงฉ๋ฌธ์ œ ํ•ด์„

์ฒด์Šค ํŒ์˜ ํฌ๊ธฐ์™€ ํ˜„์žฌ ๋‚˜์ดํŠธ์˜ ์œ„์น˜ ๊ทธ๋ฆฌ๊ณ  ๋ชฉํ‘œ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ!

 

๐Ÿ“• ํ’€์ด

๋‚˜์ดํŠธ์˜ ์ด๋™ ๊ฐ€๋Šฅ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ๊ณผ ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค. 
์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด ์ด์ „์— ๋ฐฉ๋ฌธ ํ–ˆ๋˜ ๊ณณ์€ ์ง€์–‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฒด์ŠคํŒ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ์œ„์น˜๋„ ์ œ์™ธํ•œ๋‹ค. ์ด ๋‘๊ฐ€์ง€๋ฅผ ์ง€ํ‚ค๋ฉด์„œ BFS ํƒ์ƒ‰์„ ํ•˜์˜€๋‹ค.
์นธ์„ ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชฉํ‘œ ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ํƒ์ƒ‰์„ ๋ฉˆ์ถœ ๊ฒƒ์ด๊ธฐ์— DFS ๋ณด๋‹ค BFS๊ฐ€ ๋” ํšจ์œจ์ ์ด๋‹ค.

๋‚˜์ดํŠธ์˜ ์ด๋™ ๊ฒฝ๋กœ

๐Ÿ’ป ์ฝ”๋“œ

import sys
from collections import deque
input = sys.stdin.readline

# ๋‚˜์ดํŠธ ์ด๋™ ๊ฒฝ๋กœ
dx = [-2,-1,1,2,2,1,-1,-2]
dy = [1,2,2,1,-1,-2,-2,-1]

def bfs():
    queue= deque()
    queue.append((x1, y1, 0)) # ํ˜„์žฌ ์œ„์น˜์™€ ์นด์šดํŠธ 0์„ ํ์— ์‚ฝ์ž…
    pan[x1][y1] = 1 # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    while queue: # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€
        x,y,cnt = queue.popleft()
        for i in range(8): # 8๊ฐ€์ง€ ๋ฐฉํ–ฅ ํƒ์ƒ‰
            nx = x + dx[i]
            ny = y + dy[i]

            if -1 < nx and nx < l and -1 < ny and ny < l: # ์ฒด์ŠคํŒ์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๋ฉด
                if pan[nx][ny] == 0: # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
                    pan[nx][ny] = 1 # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
                    queue.append((nx, ny, cnt+1)) # ์ด๋™ ์œ„์น˜์™€ ์นด์šดํŠธ +1์„ ํ์— ์‚ฝ์ž…
            if nx == x2 and ny == y2: # ํ˜„์žฌ ์œ„์น˜๊ฐ€ ๋ชฉํ‘œ ์œ„์น˜์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ์นด์šดํŠธ +1 ๋ฆฌํ„ด
                return cnt + 1
                
for i in range(int(input())):
    l = int(input().rstrip()) # ์ฒด์ŠคํŒ ํฌ๊ธฐ
    pan = [[0 for i in range(l)] for j in range(l)] # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
    x1,y1 = map(int, input().rstrip().split()) # ํ˜„์žฌ ์œ„์น˜
    x2,y2 = map(int, input().rstrip().split()) # ๋ชฉํ‘œ ์œ„์น˜
    if x1 == x2 and y1 == y2: # ํ˜„์žฌ์œ„์น˜์™€ ๋ชฉํ‘œ์œ„์น˜๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ 0์ถœ๋ ฅ
        print(0)
    else: # BFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
        print(bfs())

๐Ÿ”— ๋ฌธ์ œ๋งํฌ : ๋‚˜์ดํŠธ์˜ ์ด๋™

 

7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

์ฒด์ŠคํŒ ์œ„์— ํ•œ ๋‚˜์ดํŠธ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋ช‡ ๋ฒˆ ์›€์ง์ด๋ฉด ์ด ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜

www.acmicpc.net