[백준 1697번 C/C++] 숨바꼭질
[백준 1697번 C/C++] 숨바꼭질

https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
해결전략
너비우선탐색, BFS
코드
#include <iostream> #include <vector> #include <queue> using namespace std; int n, k; //n: 수빈 현재 점, k: 동생 점 queue<pair<int,int>> Q; // 첫 번째 원소는 위치, 두 번째 원소는 해당 위치에 도달하기까지 걸린 시간 vector<int> ch; //해당 위치를 방문했는지 여부를 체크 int minSec = 2147000000; void BFS(int n, int k) { //시작점인 수빈이의 위치와 초(sec)를 삽입하고 방문 처리 Q.push({ n, 0 }); ch[n] = 1; while (!Q.empty()) { int x = Q.front().first; int sec = Q.front().second; Q.pop(); //현재 위치가 목표인 동생의 위치와 같다면 지금까지 걸린 시간(sec)을 출력하고 함수를 종료 if (x == k){ cout << sec; return; } if (ch[x-1]==0 && 0 < x-1) { Q.push({ x - 1, sec + 1 }); ch[x - 1] = 1; } if (ch[x+1]==0 && x+1 < k * 2) { Q.push({ x + 1, sec + 1 }); ch[x + 1] = 1; } if (ch[x*2]==0 && x*2 < k * 2) { Q.push({ x * 2, sec + 1 }); ch[x * 2] = 1; } } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> k; ch.resize(100000);//충분히 크게 잡아줘야 한다. BFS(n, k); return 0; }
더 간결한 코드
#include <iostream> using namespace std; int min(int a, int b) { return a < b ? a : b; } int BFS(int n, int k) { if (n <= k) return k - n; else if (n == 1) return 1; else if (n % 2) return 1 + min(BFS(n - 1, k), BFS(n + 1, k)); else return min(n - k, 1 + BFS(n / 2, k)); } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; cout << BFS(n, k); }
H3 중제목
본문내용넣기
마무리
마무리
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 2206번 C/C++] 벽 부수고 이동하기 (0) | 2023.09.20 |
---|---|
[백준 7562번 C/C++] 나이트의 이동 (0) | 2023.09.01 |
[백준 12015번 C/C++] 가장 긴 증가하는 부분 수열 2 (0) | 2023.08.29 |
[백준 2580번 C/C++] 스도쿠 (0) | 2023.08.20 |
[백준 1012번 C/C++] 유기농 배추 (0) | 2023.08.18 |
댓글
이 글 공유하기
다른 글
-
[백준 2206번 C/C++] 벽 부수고 이동하기
[백준 2206번 C/C++] 벽 부수고 이동하기
2023.09.20 -
[백준 7562번 C/C++] 나이트의 이동
[백준 7562번 C/C++] 나이트의 이동
2023.09.01 -
[백준 12015번 C/C++] 가장 긴 증가하는 부분 수열 2
[백준 12015번 C/C++] 가장 긴 증가하는 부분 수열 2
2023.08.29 -
[백준 2580번 C/C++] 스도쿠
[백준 2580번 C/C++] 스도쿠
2023.08.20
댓글을 사용할 수 없습니다.