๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Problem Solving/BAEKJOON

[baekjoon]python #7562 ๋‚˜์ดํŠธ์˜ ์ด๋™

by DevIseo 2022. 5. 20.

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

 

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

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

www.acmicpc.net

from collections import deque
def bfs(y,x,m):
    global Max
    q = deque()
    q.append((y,x,m))
    
    #๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ์œ„ํ•œ visit๋ฐฐ์—ด
    visit=[[0]*n for _ in range(n)]
    visit[y][x] = 1

    while q:
        ny,nx,nm = q.popleft()
		
        #์›€์ง์ž„ ๊ฐฑ์‹ ํ•ด ์ตœ๋‹จ๊ฒฝ๋กœ ์ฐพ๊ธฐ
        if Max<nm:
            Max=nm
		
        #๋„์ฐฉํ•˜๋ฉด while๋ฌธ ์ข…๋ฃŒ
        if ny==ey and nx == ex:
            break
		
        #๋‚˜์ดํŠธ์˜ ์›€์ง์ž„
        directy=[-1,-2,-2,-1,1,2,2,1]
        directx=[-2,-1,1,2,2,1,-1,-2]
        
        for i in range(8):
            dy = directy[i] + ny
            dx = directx[i] + nx

            if 0<=dy<n and 0<=dx<n:
                if visit[dy][dx] ==0:
                    visit[dy][dx]=nm
                    q.append((dy,dx,nm+1))


t = int(input())
for tc in range(t):
    n = int(input())
    sy,sx = map(int,input().split())
    ey,ex = map(int,input().split())

    Max=0
    bfs(sy,sx,0)
    print(Max)

๐ŸŽˆ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์ฐพ์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— BFS๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.

๐ŸŽˆ์‹œ์ž‘์ ์„ ์ž…๋ ฅ๋ฐ›์•„ bfs ํ•จ์ˆ˜์— ๋„ฃ์–ด์ฃผ๋Š”๋ฐ ์ด๋•Œ movement(0)๋„ ๊ฐ™์ด ๋„ฃ์–ด์ค€๋‹ค!

๐ŸŽˆdeque๋ฅผ ์‚ฌ์šฉํ•ด ์‹œ๊ฐ„์„ ์ค„์ž„.

๐ŸŽˆ๋‚˜์ดํŠธ์˜ ์ตœ๋Œ€ ์ด๋™ ๊ฒฝ๋กœ๊ฐ€ ๋ฌธ์ œ์—์„œ ๊ทธ๋ฆผ์œผ๋กœ ์ฃผ์–ด์ ธ ์žˆ๋Š”๋ฐ ์œ„์˜ ์‹์˜ directy,directx์— ํ‘œํ˜„๋˜์–ด ์žˆ๋‹ค.

๐ŸŽˆ๋„์ฐฉ์ ์— ๋„์ฐฉํ•˜๋ฉด while๋ฌธ ์ข…๋ฃŒ

๐ŸŽˆ์ „ํ˜•์ ์ธ bfsํ‹€์„ ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ

๋Œ“๊ธ€