๋ฌธ์ :
https://www.acmicpc.net/problem/13549
ํ์ด :
์จ๋ฐ๊ผญ์ง1 ๋ฌธ์ ์ ๋ฌ๋ฆฌ ์ด๋ฒค์๋ ์๊ฐ์ด๋(M x 2)์ ์๊ฐ์ 0์ด๋ผ๋ ์กฐ๊ฑด์ด ๋ค๋ฅด๋ค. ์ฆ ๊ฑท๊ธฐ(M-1, M+1) ์กฐ๊ฑด์์ ๊ฐ์ค์น์ ์๊ฐ์ด๋์ ๊ฐ์ค์น๊ฐ ๋ฌ๋ผ ์ต์ ์๊ฐ์ ๊ตฌํ๊ธฐ ์ํด์ ์๊ฐ์ด๋์ด ์ฐ์ ์ ๋์ด์ผ ํ๊ณ
๊ฑฐ๋ฆฌ๊ฐ ์์์์ผ๋ก ์ ๋ ฌํด์ฃผ๋ ์ฐ์ ์์ํ๋ฅผ ์ฌ์ฉํด ๋ค์ต์คํฌ๋ผ๋ฅผ ์ ์ฉํ๋ค.
๊ฐ์ง ์์๋ ์์น๊ฑฐ๋ ๋๋ ์ ์ ๊ฐ์๋์ ์๊ฐ๋ณด๋ค ๋ ์ ๊ฒ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์๋ค๋ฉด ๊ทธ ์๊ฐ๊ฐ์ผ๋ก d ๋ฐฐ์ด์ ์ ๋ฐ์ดํธ ํด์ฃผ์ด ์ต์ ์๊ฐ(๋น์ฉ)์ ์ฐพ์๋ค.
c++ ์ฝ๋ :
//
// 13549_hide_seek3.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2022/02/17.
//
#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
int N, K;
int moving[3] = { - 1, 1, 2}; //walk, jump
int d[100001]; // ์ต๋จ ์๊ฐ ํ
์ด๋ธ
int n_now; // ๋ค์ ์์น
int n_t; // ๋ค์ ์์น์์ ์๊ฐ
void hide_seek_minTime() {
priority_queue<pair<int, int>> pq; //์๊ฐ, ์์น
pq.push({0, N});
d[N] = 0;
while(!pq.empty()){
int t = -pq.top().first;
int now = pq.top().second;
pq.pop();
for(int i = 0; i < 3; i++){
if(i == 2) {
n_now = moving[i] * now;
n_t = t;
}else {
n_now = moving[i] + now;
n_t = t + 1;
}
if(n_now < 0 || n_now > 100000) continue; // ๋ฒ์
if(d[n_now] == -1 || d[n_now] > n_t) { // ๊ฐ์ง ์์ ๊ธธ or ๋ ์๊ฐ ์ ๋ค๋ฉด
d[n_now] = n_t;
pq.push({-n_t, n_now});
}
}
}
}
int main(){
cin >> N >> K;
memset(d, -1, sizeof(d));
hide_seek_minTime();
cout << d[K] << '\n'; // K์์น๊น์ง ์
๋ฐ์ดํธ๋ ์๊ฐ
return 0;
}
์ฐธ๊ณ :
https://excited-hyun.tistory.com/33
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2630 ์์ข ์ด ๋ง๋ค๊ธฐ (0) | 2022.02.24 |
---|---|
[๋ฐฑ์ค] 3020 ๊ฐ๋ฅ๋ฒ๋ prefix sum(๋์ ํฉ) (0) | 2022.02.21 |
[๋ฐฑ์ค] 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ brute force (0) | 2022.02.17 |
[๋ฐฑ์ค] 1969 DNA (0) | 2022.02.16 |
[๋ฐฑ์ค] 7576 ํ ๋งํ BFS (0) | 2021.12.10 |
๋๊ธ