๐ฅ Silver2
https://www.acmicpc.net/problem/7562



โ ์ ๋ตํ์ด
import sys
from collections import deque
input = sys.stdin.readline
dx = [1, 2, 2, 1, -1, -2, -2, -1]
dy = [2, 1, -1, -2, -2, -1, 1, 2]
def bfs(start_x, start_y, end_x, end_y, length):
queue = deque([(start_x, start_y)])
visited = [[-1] * length for _ in range(length)] # ๋ชจ๋ ๊ฐ์ -1๋ก ์ด๊ธฐํ
visited[start_x][start_y] = 0 # ์์ ์ง์ ์ ์ด๋ ๊ฑฐ๋ฆฌ 0์ผ๋ก ์ค์
while queue:
cx, cy = queue.popleft()
if cx == end_x and cy == end_y: # ๋์ฐฉ ์ง์ ์ ๋๋ฌํ์ ๋
return visited[cx][cy]
for i in range(8):
nx, ny = dx[i] + cx, dy[i] + cy
if 0 <= nx < length and 0 <= ny < length and visited[nx][ny] == -1:
visited[nx][ny] = visited[cx][cy] + 1 # ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์
queue.append((nx, ny))
return -1 # ๋์ฐฉ ์ง์ ์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ
n = int(input())
for _ in range(n):
length = int(input())
start_x, start_y = map(int, input().rstrip().split()) # ์ถ๋ฐ ์ง์
end_x, end_y = map(int, input().rstrip().split()) # ๋์ฐฉ ์ง์
result = bfs(start_x, start_y, end_x, end_y, length)
print(result)
visited ๋ฆฌ์คํธ์ ์ด๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ
โ ์ ๋ตํ์ด
import sys
from collections import deque
input = sys.stdin.readline
dx = [1, 2, 2, 1, -1, -2, -2, -1]
dy = [2, 1, -1, -2, -2, -1, 1, 2]
def bfs(start_x, start_y, end_x, end_y, length):
queue = deque([(start_x, start_y, 0)]) # ํ์ ์ด๋ ํ์๋ ํจ๊ป ์ ์ฅ
visited = [[0] * (length + 1) for _ in range(length + 1)]
visited[start_x][start_y] = 1
while queue:
cx, cy, count = queue.popleft()
if cx == end_x and cy == end_y: # ๋์ฐฉ์ง์ ์ ๋๋ฌํ์ ๋
return count
for i in range(8):
nx, ny = dx[i] + cx, dy[i] + cy
if 0 <= nx < length and 0 <= ny < length and visited[nx][ny] == 0:
visited[nx][ny] = 1
queue.append((nx, ny, count + 1))
return -1 # ๋์ฐฉ์ง์ ์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ
n = int(input())
for _ in range(n):
length = int(input())
start_x, start_y = map(int, input().rstrip().split())
end_x, end_y = map(int, input().rstrip().split())
result = bfs(start_x, start_y, end_x, end_y, length)
print(result)
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
98880KB | 2152ms |
ํ์ ๋ฐ์ดํฐ ํํ์ ์ด๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ
๋ฌธ์ ๋ฅผ ์ฒ์๋ณด๊ณ ๊ฒ๋จน์์ง๋ง
์ค๋ ํ์๋ ๋ฌธ์ ๋ค์ ์ ์กฐํฉํด๋ณด๋ฉด์ ํ๋ค๋ณด๋ ๋ฌด์ฌํ ํด๊ฒฐ๋ ์ ์์๋ค.
๋จผ์ 8๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ๊ฒฝ์ฐ๋ฅผ dx,dy๊ฐ์ ๋ฐฐ์ด๋ก ์ ์ํด์ฃผ๊ณ , ๊ฐ n๊ฐ์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๊ธฐ๋๋ฌธ์ ๊ทธ์ ํด๋นํ๋ visited ๋ฆฌ์คํธ๋ ๊ฐ๊ฐ ์์ฑํด์ผํ๋ฏ๋ก dfsํจ์๋ด์์ ์์ฑ์ ํด์ฃผ์๋ค. ์ด๊ฒ ์ฒ์ ์ค๋ต์ ์์ธ์ด์๋ค..
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง๋ ์ถ๋ฐ์ง์ ์์ ๋์ฐฉ์ง์ ๊น์ง์ ์ด๋ํ์๋ฅผ ๊ตฌํ๋๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก BFS๋ก ํ์ดํ์๋ค.
visited๋ฐฐ์ด์์ 0๊ณผ1๋ก ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ๊ตฌ๋ถํ๊ณ , ํ์ ํ์ฌ์ขํ(nx,ny)์ ์ด๋๊ฑฐ๋ฆฌ count๊ฐ์ ํํ๋ก ๊ด๋ฆฌํ์๋ค.
์ด๋ฐ ์ด๋ํ๋ ๋ฌธ์ ์์ ์ธ๋ฑ์ค ์ ํจ์ฑ ๊ฒ์ฌ๋ ๊ผญ ํ์์ด๋ ์์ง๋ง์...
ํ์์ popleft๋ก ๊บผ๋ธ ์์๊ฐ ํ์ฌ ์ขํ(cx,cy)๊ฐ ๋ ๊ฒ์ด๊ณ , ํํ๋ก ํจ๊ป ์ ์ฅํ count๋ฅผ ๋ฆฌํดํ๋ค.
bfs์์ ๋ค์์ผ๋ก ์ํํ ๋ ธ๋๋ฅผ ์ดํด๋ณด๊ธฐ ์ํด ์ธ์ ๋ฆฌ์คํธ๋ฅผ ํ์ธํ๋ฏ 8๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์
nx,ny๋ฅผ ์ ์ํด์ ๊ฐ ๋ฐฉํฅ๋ง๋ค ์ด๋ํ ์ขํ๋ฅผ ๊ตฌํ๊ณ , ๋ฐฉ๋ฌธํ์ ์ด ์๋ค๋ฉด ์ค๋ณต์ฌ๋ถ๋ฅผ ์ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ์ count๋ฅผ ํ์ฌ๊น์ง ์ด๋ํ visited[cx][cy]์ 1์ ๋ํด ์ ๋ฐ์ดํธ ํด์ค๋ค.
๊ฐ์ด ํ์ด๋ณด๋ฉด ์ข์ ๋ฌธ์
๐๐ป ์ ๊ธฐ๋ ๋ฐฐ์ถ 1012๋ฒ
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค-Python] ํ์ผ ํฉ์น๊ธฐ 3 : 13975๋ฒ (1) | 2024.06.11 |
---|---|
[๋ฐฑ์ค-Python] ์จ๋ฐ๊ผญ์ง : 1697๋ฒ (0) | 2024.06.11 |
[๋ฐฑ์ค-Python] ์ด์๊ณ์ฐ : 2644๋ฒ (0) | 2024.06.10 |
[๋ฐฑ์ค-Python] ๊ฒ์ : 1072๋ฒ (0) | 2024.06.08 |
[๋ฐฑ์ค-Python] ์ขํ ์์ถ : 18870๋ฒ (0) | 2024.06.07 |
๐ฅ Silver2
https://www.acmicpc.net/problem/7562



โ ์ ๋ตํ์ด
import sys
from collections import deque
input = sys.stdin.readline
dx = [1, 2, 2, 1, -1, -2, -2, -1]
dy = [2, 1, -1, -2, -2, -1, 1, 2]
def bfs(start_x, start_y, end_x, end_y, length):
queue = deque([(start_x, start_y)])
visited = [[-1] * length for _ in range(length)] # ๋ชจ๋ ๊ฐ์ -1๋ก ์ด๊ธฐํ
visited[start_x][start_y] = 0 # ์์ ์ง์ ์ ์ด๋ ๊ฑฐ๋ฆฌ 0์ผ๋ก ์ค์
while queue:
cx, cy = queue.popleft()
if cx == end_x and cy == end_y: # ๋์ฐฉ ์ง์ ์ ๋๋ฌํ์ ๋
return visited[cx][cy]
for i in range(8):
nx, ny = dx[i] + cx, dy[i] + cy
if 0 <= nx < length and 0 <= ny < length and visited[nx][ny] == -1:
visited[nx][ny] = visited[cx][cy] + 1 # ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์
queue.append((nx, ny))
return -1 # ๋์ฐฉ ์ง์ ์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ
n = int(input())
for _ in range(n):
length = int(input())
start_x, start_y = map(int, input().rstrip().split()) # ์ถ๋ฐ ์ง์
end_x, end_y = map(int, input().rstrip().split()) # ๋์ฐฉ ์ง์
result = bfs(start_x, start_y, end_x, end_y, length)
print(result)
visited ๋ฆฌ์คํธ์ ์ด๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ
โ ์ ๋ตํ์ด
import sys
from collections import deque
input = sys.stdin.readline
dx = [1, 2, 2, 1, -1, -2, -2, -1]
dy = [2, 1, -1, -2, -2, -1, 1, 2]
def bfs(start_x, start_y, end_x, end_y, length):
queue = deque([(start_x, start_y, 0)]) # ํ์ ์ด๋ ํ์๋ ํจ๊ป ์ ์ฅ
visited = [[0] * (length + 1) for _ in range(length + 1)]
visited[start_x][start_y] = 1
while queue:
cx, cy, count = queue.popleft()
if cx == end_x and cy == end_y: # ๋์ฐฉ์ง์ ์ ๋๋ฌํ์ ๋
return count
for i in range(8):
nx, ny = dx[i] + cx, dy[i] + cy
if 0 <= nx < length and 0 <= ny < length and visited[nx][ny] == 0:
visited[nx][ny] = 1
queue.append((nx, ny, count + 1))
return -1 # ๋์ฐฉ์ง์ ์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ
n = int(input())
for _ in range(n):
length = int(input())
start_x, start_y = map(int, input().rstrip().split())
end_x, end_y = map(int, input().rstrip().split())
result = bfs(start_x, start_y, end_x, end_y, length)
print(result)
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
98880KB | 2152ms |
ํ์ ๋ฐ์ดํฐ ํํ์ ์ด๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ
๋ฌธ์ ๋ฅผ ์ฒ์๋ณด๊ณ ๊ฒ๋จน์์ง๋ง
์ค๋ ํ์๋ ๋ฌธ์ ๋ค์ ์ ์กฐํฉํด๋ณด๋ฉด์ ํ๋ค๋ณด๋ ๋ฌด์ฌํ ํด๊ฒฐ๋ ์ ์์๋ค.
๋จผ์ 8๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ๊ฒฝ์ฐ๋ฅผ dx,dy๊ฐ์ ๋ฐฐ์ด๋ก ์ ์ํด์ฃผ๊ณ , ๊ฐ n๊ฐ์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๊ธฐ๋๋ฌธ์ ๊ทธ์ ํด๋นํ๋ visited ๋ฆฌ์คํธ๋ ๊ฐ๊ฐ ์์ฑํด์ผํ๋ฏ๋ก dfsํจ์๋ด์์ ์์ฑ์ ํด์ฃผ์๋ค. ์ด๊ฒ ์ฒ์ ์ค๋ต์ ์์ธ์ด์๋ค..
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง๋ ์ถ๋ฐ์ง์ ์์ ๋์ฐฉ์ง์ ๊น์ง์ ์ด๋ํ์๋ฅผ ๊ตฌํ๋๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก BFS๋ก ํ์ดํ์๋ค.
visited๋ฐฐ์ด์์ 0๊ณผ1๋ก ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ๊ตฌ๋ถํ๊ณ , ํ์ ํ์ฌ์ขํ(nx,ny)์ ์ด๋๊ฑฐ๋ฆฌ count๊ฐ์ ํํ๋ก ๊ด๋ฆฌํ์๋ค.
์ด๋ฐ ์ด๋ํ๋ ๋ฌธ์ ์์ ์ธ๋ฑ์ค ์ ํจ์ฑ ๊ฒ์ฌ๋ ๊ผญ ํ์์ด๋ ์์ง๋ง์...
ํ์์ popleft๋ก ๊บผ๋ธ ์์๊ฐ ํ์ฌ ์ขํ(cx,cy)๊ฐ ๋ ๊ฒ์ด๊ณ , ํํ๋ก ํจ๊ป ์ ์ฅํ count๋ฅผ ๋ฆฌํดํ๋ค.
bfs์์ ๋ค์์ผ๋ก ์ํํ ๋ ธ๋๋ฅผ ์ดํด๋ณด๊ธฐ ์ํด ์ธ์ ๋ฆฌ์คํธ๋ฅผ ํ์ธํ๋ฏ 8๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์
nx,ny๋ฅผ ์ ์ํด์ ๊ฐ ๋ฐฉํฅ๋ง๋ค ์ด๋ํ ์ขํ๋ฅผ ๊ตฌํ๊ณ , ๋ฐฉ๋ฌธํ์ ์ด ์๋ค๋ฉด ์ค๋ณต์ฌ๋ถ๋ฅผ ์ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ์ count๋ฅผ ํ์ฌ๊น์ง ์ด๋ํ visited[cx][cy]์ 1์ ๋ํด ์ ๋ฐ์ดํธ ํด์ค๋ค.
๊ฐ์ด ํ์ด๋ณด๋ฉด ์ข์ ๋ฌธ์
๐๐ป ์ ๊ธฐ๋ ๋ฐฐ์ถ 1012๋ฒ
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค-Python] ํ์ผ ํฉ์น๊ธฐ 3 : 13975๋ฒ (1) | 2024.06.11 |
---|---|
[๋ฐฑ์ค-Python] ์จ๋ฐ๊ผญ์ง : 1697๋ฒ (0) | 2024.06.11 |
[๋ฐฑ์ค-Python] ์ด์๊ณ์ฐ : 2644๋ฒ (0) | 2024.06.10 |
[๋ฐฑ์ค-Python] ๊ฒ์ : 1072๋ฒ (0) | 2024.06.08 |
[๋ฐฑ์ค-Python] ์ขํ ์์ถ : 18870๋ฒ (0) | 2024.06.07 |