๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Silver

[BOJ] 1697 : ์ˆจ๋ฐ”๊ผญ์งˆ

by Jaeguk 2022. 1. 20.
๋ฌธ์ œ ๋งํฌ

1697๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ (acmicpc.net)

 

1697๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ

www.acmicpc.net

์‹ค๋ฒ„๋ผ๊ณ  ๋งŒ๋งŒํ•˜๊ฒŒ ๋ดค๋‹ค

ํ’€์ด

BFS๋ฅผ ํ™œ์šฉํ•œ ๋ฌธ์ œ. ์•ž์œผ๋กœ ํ•œ ์นธ์„ ๊ฐ€๋“  ๋’ค๋กœ ํ•œ ์นธ์„ ๊ฐ€๋“  ์ˆœ๊ฐ„์ด๋™์„ ํ•˜๋“  ์‚ฌ์šฉ๋˜๋Š” ์‹œ๊ฐ„์€ ๋™์ผํ•˜๋‹ค.

ํ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์œ„์น˜์™€ ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <climits>
#include <algorithm>
#include <tuple>
#include <cmath>
using namespace std;
typedef long long ll;
int N, K;
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N >> K;
    queue<pair<intint>> q;
    q.push({ N, 0 });
 
    while (!q.empty()) {
        int now = q.front().first;
        int Time = q.front().second;
        q.pop();
        if (now == K) {
            cout << Time << "\n";
            break;
        }
        q.push({ now * 2, Time + 1 });
        q.push({ now + 1, Time + 1 });
        q.push({ now - 1, Time + 1 });
    }
    return 0;
}
 
 
cs

 

๋ง ๊ทธ๋Œ€๋กœ BFS์— ๊ธฐ์ดˆํ•œ ์ฝ”๋“œ๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ๋งˆ์ฃผํ–ˆ๋‹ค. ์‹œ๊ฐ„์ดˆ๊ณผ๋Š” ์ž์ฃผ ๋ฐ›์•˜์–ด๋„ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋Š” ์ฒ˜์Œ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์•„๋งˆ ํ•œ ๋ฒˆ ๋Œ๋•Œ๋งˆ๋‹ค ํ์— 3๊ฐœ์”ฉ ๋ฐ€์–ด๋„ฃ์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ๊ฐ™๋‹ค. ๋ฌด์กฐ๊ฑด ๋ฐ€์–ด ๋„ฃ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์˜ˆ์™ธ๋ฅผ ๊ฑธ์–ด์ค˜์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

Time_mem ์ด๋ผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๊ทธ ์œ„์น˜๊นŒ์ง€ ๊ฐ€๋Š”๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ์ €์žฅํ–ˆ๋‹ค. ๋งŒ์•ฝ ๊ฐ™์€ ์œ„์น˜์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ด ์ด๋ฏธ ์ €์žฅ๋œ ์‹œ๊ฐ„๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ตณ์ด ํ์— ๋‹ค์Œ ๊ฒฝ์šฐ๋ฅผ ๋ฐ€์–ด๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ํ์— ๋” ๋„ฃ์ง€์•Š๊ณ  continue๋กœ ๋„˜์–ด๊ฐ”๋‹ค.

์ด๋ ‡๊ฒŒ ํ–ˆ๋”๋‹ˆ ํ๋Š” ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์—ˆ๋‹ค. now * 2 ๋ฅผ ๊ณ„์† ํ•˜๋‹ค๋ณด๋‹ˆ now๊ฐ€ ๋ฌดํ•œํžˆ ์ปค์งˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด Time_mem์˜ ๋ฒ”์œ„๋ฅผ K์˜ ๋ฒ”์œ„๋กœ ์ง€์ •ํ•ด๋†จ๋Š”๋ฐ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋‚˜๊ฒŒ๋œ๋‹ค. ๋˜ ์‹œ๊ฐ„๋‚ญ๋น„์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋‹ค.

now์˜ 2๋ฐฐ๊ฐ€ K์˜ 2๋ฐฐ๋ฅผ ๋„˜์„ ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ์™œ๋ƒ now์˜ 2๋ฐฐ๊ฐ€ K์˜ 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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <climits>
#include <algorithm>
#include <tuple>
#include <cmath>
using namespace std;
typedef long long ll;
int N, K;
int Time_mem[1000000 + 5];
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N >> K;
    memset(Time_mem, -1sizeof(Time_mem));
    queue<pair<intint>> q;
    q.push({ N, 0 });
    while (!q.empty()) {
        int now = q.front().first;
        int Time = q.front().second;
        q.pop();
        if (now == K) {
            cout << Time << "\n";
            break;
        }
        if (Time_mem[now] != -1 && Time_mem[now] <= Time)
            continue;
        Time_mem[now] = Time;
        q.push({ now + 1, Time + 1 });
        q.push({ now - 1, Time + 1 });
        if (now * 2 >= K * 2)
            continue;
        q.push({ now * 2, Time + 1 });
    }
    return 0;
}
 
 
cs

๊ทธ๋ ‡๊ฒŒ ๊น”๋”ํ•œ ์ฝ”๋“œ๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„๋ฌดํŠผ ๋งž์•˜๋‹ค.

 

 

728x90

'๋ฐฑ์ค€ > Silver' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] 19539 : ์‚ฌ๊ณผ๋‚˜๋ฌด  (0) 2022.03.22
[BOJ] 6716 : Collecting Beepers  (0) 2022.01.19