No Rules Rules

점프 (feat. 백준, 2253번) 본문

생활/코테

점프 (feat. 백준, 2253번)

개발하는 완두콩 2022. 10. 20. 13:31
728x90
반응형

점프
https://www.acmicpc.net/problem/2253

 

2253번: 점프

N(2 ≤ N ≤ 10,000)개의 돌들이 같은 간격으로 놓여 있다. 편의상 순서대로 1, 2, …, N번 돌이라고 부르자. 당신은 현재 1번 돌 위에 있는데, 이 돌들 사이에서 점프를 하면서 N번째 돌로 이동을 하려

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <queue>
#include <tuple>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    register int N, M, ans = 99999999;
    bool rock[10001]{false};
    vector<int> check[10001];
    cin >> N >> M;
    for(register int m = 0, v; m < M; ++m)
        cin >> v, rock[v] = true;
    queue<tuple<int, int, int>> q;      // 위치, 가속, 횟수
    q.push(make_tuple(1, 0, 0));
    while(!q.empty()){
        auto p = q.front(); q.pop();
        auto v = get<0>(p), s = get<1>(p), cnt = get<2>(p);
        if(v > N)
            continue;
        else if(v == N){
            ans = min(ans, cnt);
            continue;
        }
        else{
            register int jump[] = {s - 1, s, s + 1}, nv, nc = cnt + 1;
            for(register int i = 0; i < 3; ++i)
                if(jump[i] > 0){
                    nv = v + jump[i];
                    if(nv <= N && !rock[nv] && find(check[nv].begin(), check[nv].end(), jump[i]) == check[nv].end())
                        check[nv].push_back(jump[i]), q.push(make_tuple(nv, jump[i], nc));
                }
        }
    }
    if(ans == 99999999)
        cout << -1;
    else
        cout << ans;
    return 0;
}
// *&)*@*

 

반응형
  1. 현재 위치에서 이동할 수 있는 조건은 이전 속도 - 1, 이전 속도, 이전 속도 + 1 만큼만 존재합니다.
  2. 또한 특정한 위치에 도달했을때, 이곳으로 오기 위했던 속도가 이미 있다면 (체크 요소) 재방문할 필요가 없습니다.
    즉, 10이라는 위치에 2라는 속도로 왔다면, 이전에 2라는 속도로 왔던 적이 없는 경우에만 방문합니다.
  3. 따라서 이와 같은 조건으로 bfs를 수행하면 됩니다.
728x90
반응형

'생활 > 코테' 카테고리의 다른 글

그림 (feat. 백준, 1926번)  (0) 2022.10.20
경쟁적 전염 (feat. 백준, 18405번)  (0) 2022.10.20
별 찍기 - 4 (feat. 백준, 2441번)  (0) 2022.10.20
세 수 (feat. 백준, 10817번)  (0) 2022.10.20
학점계산 (feat. 백준, 2754번)  (0) 2022.10.20
Comments