https://www.acmicpc.net/problem/12851
12851번: 숨바꼭질 2
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때
www.acmicpc.net
[난이도] Gold5
[유형] BFS
[풀이]
모든 가능한 경우를 구해야 하므로 단순 특정 점에 방문했는지 유무만 기록하면 안되고
몇 초만에 처음 방문했는지를 기록해놔야 모든 경우에 대해 구할 수 있다. (dist[nxt] = dist[cur]+1 과 같이..)
#include <cstdio> #include <queue> using namespace std; int N,K,visit[100001]; int main(){ scanf("%d%d",&N,&K); queue<int> q; q.push(N); int t=0,ans=0; while(!q.empty()){ int sz=q.size(); while(sz--){ int cur=q.front(); q.pop(); if(cur==K) ans++; for(auto nxt : {cur-1,cur+1,cur*2}){ if(nxt<0 || nxt>1e5) continue; if(!visit[nxt] || visit[nxt]==visit[cur]+1){ visit[nxt]=visit[cur]+1; q.push(nxt); } } } if(ans>0) break; t++; } printf("%d\n%d",t,ans); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/12851.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold5] 2470 : 두 용액 (C++) (0) | 2021.03.25 |
---|---|
[BOJ/백준][Gold5] 14226 : 이모티콘 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold5] 2636 : 치즈 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold5] 13549 : 숨바꼭질 3 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold5] 17070 : 파이프 옮기기 1 (C++) (0) | 2021.03.25 |