본문 바로가기
백준

백준 13913 숨바꼭질 4

by 콩순이냉장고 2022. 1. 25.

문제 URL : https://www.acmicpc.net/problem/13913

 

13913번: 숨바꼭질 4

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

문제 접근법 : 

n -> k로 이동 방법이 -1, 1 , *2 를 해서 k를 만드는문제고 어떻게 만드는지까지 출력하는 문제입니다.

 

n->k까지 만드는데 얼마만큼의 깊이를 탐색하는건 bfs면 충분합니다.

하지만 어떻게 만드는지 만들기위해 check[]를 true ,false만 이용한다면 어떻게 만드는지까지 만들기가 힘듭니다.

 

그렇다면  n에서  k까지 만드는데 -1,1, *2를 했으니  그했던과정을 check[]에서 어떻게 만들었는지 표시를 한수

반대로 k에서 n까지 만드는것을 반대로 1,-1, 나누기2 를해주면 됩니다.

 

소스코드 : 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include<bits/stdc++.h>
using namespace std;
int n, k;
int check[200001];
int dir[4= { 0,-1,1,2 };
void input() {
    cin >> n >> k;
}
 
bool isrange(int t) {
    return 0 <= t && t <= 200000;
}
 
int bfs() {
    queue<int> q;
    q.push(n);
    check[n] = -1;
    int cnt = 0;
    while (!q.empty()) {
        int qsize = q.size();
        while (qsize--) {
            int cur = q.front();
            q.pop();
            if (cur == k)
                return cnt;
            for (int i = 1; i <= 3; i++) {
                int next = (i == 3 ? cur * dir[i] : cur + dir[i]);
                if (isrange(next) && check[next] == 0) {
                    check[next] = i;
                    q.push(next);
                }
            }
        }
        cnt++;
    }
    return -1;
}
 
void solve() {
    cout << bfs() << "\n";
    vector<int> v;
    int cur = k;
    while (check[cur] != -1) {
        v.push_back(cur);
        cur = (check[cur] == 3 ? cur / dir[check[cur]] : cur - dir[check[cur]]);
    }
    v.push_back(cur);
    for (int i = v.size() - 1; i >= 0; i--)
        cout << v[i] << " ";
    cout << "\n";
}
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    //freopen("input.txt", "r", stdin);
    input();
    solve();
 
}
 
cs

 

궁금한점 혹은 모르는점 어떤 질문이든 댓글은 언제나 환영입니다.

 

'백준' 카테고리의 다른 글

백준 7453 합이 0인 네 정수  (0) 2022.03.07
백준 17436 소수의 배수  (0) 2022.01.27
백준 3649 로봇 프로젝트  (0) 2021.12.16
백준 18808 스티커 붙이기  (0) 2021.12.15
백준 11967 불켜기  (0) 2021.12.15