반응형
250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- SWEA
- 코딩 교육
- 코딩교육
- DP
- 전이학습
- dfs
- ssafy 7기
- 프로그래머스
- ssafy 7기 합격
- SSAFYcial
- 삼성청년sw아카데미
- 삼성 청년 SW 아카데미
- DenseNet
- SSAFY
- git
- 싸피 7기 입학식
- React
- 유니온 파인드
- SSAFY 8기
- 이코테
- ssafy 7기 교수님
- 알고리즘
- 백준7576 bfs
- 프로그래머스 고득점 kit
- SSAFY 입학식
- bfs
- Learning
- 웹 표준 사이트 만들기
- 백준
- pytorch
Archives
- Today
- Total
개미의 개열시미 프로그래밍
[알고리즘] 백준7562 나이트의 이동 - 파이썬 본문
728x90
반응형
단계별 풀기 dfs, bfs의 8문제입니다.. 한문제만 더 풀면 다른 파트를 공부할 수 있습니다ㅜ
https://www.acmicpc.net/problem/7562
풀이코드
from collections import deque
from sys import stdin
def bfs(x, y):
# 나이트의 이동범위
dx = [-1, 1, -2, 2, -2, 2, -1, 1]
dy = [-2, -2, -1, -1, 1, 1, 2, 2]
queue = deque()
queue.append([x, y])
while queue:
x, y = queue.popleft()
if x == n and y == m:
print(graph[x][y])
break
for i in range(8): # 나이트의 이동
xx = x + dx[i]
yy = y + dy[i]
if 0 <= xx < l and 0 <= yy < l and graph[xx][yy] == 0:
graph[xx][yy] = graph[x][y] + 1
queue.append([xx, yy])
n = int(input())
for _ in range(n):
l = int(input())
graph = [[0]*l for _ in range(l)] # 체스판 생성
x, y = map(int, stdin.readline().split()) # 현재 있는 칸
n, m = map(int, stdin.readline().split()) # 목표지점의 칸
bfs(x, y)
문제풀이
: 이번 문제는 난이도가 좀 쉬운편이라고 생각된 문제입니다. 기존 목표지점까지의 최단거리를 풀때의 bfs를 풀이를 참고하면 되고 단, 상하좌우가 아닌 나이트의 이동범위를 생각해서 dx, dy 배열을 위의 코드처럼 작성하였습니다. 지금까지 dfs, bfs 단계별 풀기를 문제없이 풀었다면 쉬운문제라고 생각합니다.
728x90
반응형
'알고리즘 > DFS, BFS, 백트래킹' 카테고리의 다른 글
[알고리즘] 백준11724 연결 요소의 개수 - 파이썬 (0) | 2021.09.06 |
---|---|
[알고리즘] 백준1707 이분그래프 - 파이썬 (0) | 2021.06.10 |
[알고리즘] 백준2206 벽 부수고 이동하기 - 파이썬 (0) | 2021.06.08 |
[알고리즘] 백준1697 숨바꼭질 - 파이썬 (0) | 2021.06.07 |
[알고리즘] 백준7569 토마토 - 파이썬 (0) | 2021.06.06 |
Comments