[백준] 숨바꼭질 1697

Soohyeon B·2022년 11월 23일
0

알고리즘 문제 풀이

목록 보기
51/70

문제

  • 수빈이는 현재 점 N에 있고 동생은 점 K에 있다.
  • 수빈이는 걷거나 순간이동을 할 수 있다.
  • 걷는다면 x+1, x-1로 이동
  • 순간이동을 하면 2*x로 이동
  • 수빈이가 동생을 찾을 수 있는 가장 빠른 시간은 몇초 후인지 구하여라
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second

int dist[100001];

int dx[3]={1,-1,0};

int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int n, k;
    cin >> n>>k;
    
    queue<int> Q;
    Q.push(n);
    dist[n]= 1;//초기값을 0으로 설정
    
    while(!Q.empty()){
        //큐에서 원소를 꺼내서 앞으로 걸을 때, 뒤로 걸을 때, 뛸 때 세가지 확인
        int cur = Q.front();
        Q.pop();
        
        for(int dir=0; dir<3; dir++){
            int next;
            if(dx[dir]==0) next = cur*2;
            else next = cur+dx[dir];
            
            
            if(next <0 || next >100000) continue;
            if(dist[next] !=0) continue; //방문 했으면 continue
            
            dist[next] = dist[cur]+1;
            Q.push(next);
        }
    }
    
    cout <<dist[k];
    
}
profile
하루하루 성장하는 BE 개발자

0개의 댓글