๋ฌธ์ :
๋ถ์ :
ํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ฅผ ํ์๋ค ๐คญ ์ฒ์์ ์ฌ๊ท๋ก ์ ๊ทผํ๋ค ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ๋จผ์ ํ์ ํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ bfs ๋ฌธ์ ์ด๋ฏ๋ก queue๋ฅผ ์ฌ์ฉํ๊ณ ์๋น์ด์ ์์ง์ moving ๋ฐฐ์ด์ ๋ฃ์ ๋ค visit์ ์์ง์ธ ๊ฑฐ๋ฆฌ๋งํผ์ +1 ํด์ค์ ๋์ ์์ผฐ๋ค.
๊ทธ๋ฆฌ๊ณ k์ ๋๋ฌํ์ ๋ ๋์ ๋ ๊ฐ์ ์ถ๋ ฅ์ํค๋ฉด ๋!!
c++ ์ฝ๋ :
//
// 1697_hide_seek.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/02/21.
//
#include <stdio.h>
#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
#define MAX 100000
int visit[MAX + 1];
int n, k;
int moving[3] = { - 1, 1, 2}; //walk, jump
void hide_and_seek_bfs(int num){
queue<int> q;
q.push(num);
visit[num] = 0;
if(num == k){
cout << 0 << '\n';
}
while(!q.empty()){
int temp = q.front();
int next;
q.pop();
for(int i = 0; i < 3; i++){
if(i == 2) next = moving[i] * temp;
else next = moving[i] + temp;
//์์ธ ์ฒ๋ฆฌ
if(next < 0 || next > 100000) continue;
if(visit[next] != -1) continue;
q.push(next);
visit[next] = visit[temp] + 1;
if(next == k){
cout << visit[next] << '\n';
break;
}
}
}
}
int main(){
memset(visit, -1, sizeof(visit));
cin >> n >> k;
hide_and_seek_bfs(n);
return 0;
}
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 13460 ๊ตฌ์ฌ ์ฐพ๊ธฐ2 BFS (0) | 2021.04.22 |
---|---|
[๋ฐฑ์ค] 2583 ์์ญ ๊ตฌํ๊ธฐ DFS (0) | 2021.04.22 |
[๋ฐฑ์ค] 9012 ๊ดํธ string (0) | 2021.04.21 |
[๋ฐฑ์ค] 1110 ๋ํ๊ธฐ ์ฌ์ดํด string (0) | 2021.04.21 |
[๋ฐฑ์ค] 2309 ์ผ๊ณฑ ๋์์ด backtracking (0) | 2021.04.06 |
๋๊ธ