Develop & CS/Baekjoon

[Baekjoon] [7562 : 나이트의 이동] C++ 풀이

2023. 3. 2. 13:15
목차
  1. 풀이
반응형

나이트의 이동 문제는 BFS로 최소 이동 수를 찾는 문제이고 이동하는데 걸리는 횟수를 dist에 저장하면서

bfs를 돌리면 간단하게 풀립니다.

 

 

풀이


#include <bits/stdc++.h>
using namespace std;

int dx[8] = {-1, -1, -2, -2, 1, 1, 2, 2};
int dy[8] = {-2, 2, -1, 1, -2, 2, -1, 1};
// 나이트의 이동 경로


int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	int n, l;
	cin >> n; //테스트 케이스 입력

	while (n--)
	{
		cin >> l;

		queue<pair<int, int>> q; //bfs를 위한 queue
		int dist[301][301]; //distance를 저장하는 이차원 배열
		for (int i=0; i<l; i++)
			fill(dist[i], dist[i] + l, -1); //dist를 -1로 초기화

		int sx, sy;
		int ex, ey;
		cin >> sx >> sy; //start x, y
		q.push({sx, sy}); // queue에 넣고
		dist[sx][sy] = 0; //방문을 표시

		cin >> ex >> ey; //end x, y
		
		while(!q.empty()) //bfs 시작
		{
			auto cur = q.front(); q.pop(); 
			bool check = false; //bfs를 종료해야 하는지 check
			if (cur.first == ex && cur.second == ey) //시작점과 종점이 같으면 예외처리
			{
				cout << "0\n";
				break;
			}
			for (int i=0; i<8; i++)
			{
				int nx = cur.first + dx[i];
				int ny = cur.second + dy[i];

				if (nx < 0 || nx >= l || ny < 0 || ny >= l) //인덱스를 벗어날 경우
					continue;
				if (dist[nx][ny] >= 0) //이미 방문했을 경우
					continue;
				if (nx == ex && ny == ey) // 종점에 다다르면
				{
					cout << dist[cur.first][cur.second]  + 1<< "\n"; //출력
					check = true; //bfs를 종료
					break;
				}
				q.push({nx, ny});
				dist[nx][ny] = dist[cur.first][cur.second] + 1;
			}
			if (check)
				break;
		}
	}
	return 0;
}
반응형
  1. 풀이
'Develop & CS/Baekjoon' 카테고리의 다른 글
  • [Baekjoon] [7569 : 토마토] C++ 풀이
  • [Baekjoon] [1654 : 랜선자르기] 이진탐색과 문제풀이
  • [Baekjoon] [11690 : LCM(1, 2, ..., n)]
  • [Baekjoon] [1456 : 거의 소수]
그믐​
그믐​
그믐​
neutrinox4b1
그믐​
전체
오늘
어제
  • 분류 전체보기 (288)
    • Write up (Wargame) (121)
      • Pwnable (60)
      • Reversing (0)
      • Web Hacking (8)
      • Forensic (1)
      • Cryptography (6)
      • LOB (10)
      • misc (0)
      • SF pwnable 기초 (10)
      • SF pwnable 심화 (1)
      • LOS (25)
    • Security (73)
      • 시스템 해킹(PWN, System) (21)
      • 리버싱(Reverse Engineering) (1)
      • 포렌식(Forensic) (3)
      • 암호학(Cryptography) (44)
      • 네트워크(Network) (1)
      • 임베디드(Emebedded) (0)
    • Develop & CS (38)
      • Algorithm & Data Structure (6)
      • Baekjoon (11)
      • C, C++ (8)
      • Python (2)
      • R (1)
      • etc (8)
    • 프로젝트(Project) (7)
      • 시간표&급식 파싱 (1)
      • 남방진동지수 (1)
      • 네트워크 해킹 (5)
    • Daily life (44)
      • My Book (10)
      • Book Review (1)
      • IT Review (1)
      • 일상 팁 (19)
      • 네트워크관리사 (2)
      • 근황 (11)
    • 수학&과학(Mathematics & Science.. (4)

인기 글

공지사항

  • Wargame, CTF별 검색 키워드 정리
hELLO · Designed By 정상우.
그믐​
[Baekjoon] [7562 : 나이트의 이동] C++ 풀이
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.