๐ ๋ฌธ์ ๋ชฉ๋ก
- [๐ฅ1] 1697 - ์จ๋ฐ๊ผญ์ง
- [๐ฅ5] 5014 - ์คํํธ๋งํฌ
- [๐ฅ5] 14226 - ์ด๋ชจํฐ์ฝ
๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ์ ์์ฑํ ๊ฒ์ผ๋ก ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค
ํน ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค๐
1. ์จ๋ฐ๊ผญ์ง
๊ทธ๋ฆฌ๋๋ฅผ ๋ ์ฌ๋ฆด ์๋ ์์ง๋ง ๊ทธ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ ๋ฐฉ๋ฒ์ด ์๋์ ๊ธ๋ฐฉ ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด 5์์ 12๋ก ๊ฐ๋ค๊ณ ํ์ ๋, ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๊ฐ๋ ๊ฒฝ๋ก๋ 5->6->12 ์ด์ง๋ง
๊ทธ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ๋ฉด 5->10->11->12์ ๊ฒฝ๋ก๋ก ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ์ฒ๋ผ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ ์ฃผ๋ก BFS๋ฅผ ์ฌ์ฉํ๋๋ฐ, ํ๋ฅผ ์ฌ์ฉํด์ ๋ฐ๋ณต๋ฌธ ํ ํด์ ๊ฐ ์ ์๋ ์์น๋ค์ ํ์ ๋ฃ๊ณ ๊ฐ ์์น์ ์นด์ดํธ๋ฅผ ํ์ฌ ์นด์ดํธ+1๋ก ์ ์ฅํด๊ฐ๋ ๋ฐฉ์์ด๋ค.
์ผ๋จ ํ๊ฐ ๋น ๋๊น์ง ์์
์ ๋ฐ๋ณตํ๋๋ฐ ๋์ค์ ์ ๋ต์ด ๋์ค๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํ๋ค.
์ด๋ ์ฃผ์ํด์ผ ํ ์ ์ด ์๋ค. ๋ค์์ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ ์ ์๋ค.
- ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ: ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์ผ๋ฉด ๋ฐฉ๋ฌธํ๋ ์์น๊ฐ ๊ณ์ํด์ ํ์ push๋๋ฏ๋ก ํ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์.
- ๋ฐฉ๋ฌธ ๋ฒ์ ์ ํ: ๋ฐฉ๋ฌธ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ๋ฐํ์ ์๋ฌ ๋ฐ์.
๋ฐ๋ผ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํด boolํ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฃผ๊ณ ๋ฐฐ์ด์ ํฌ๊ธฐ ๋ฐ ๋ฐฉ๋ฌธ ์ ํ ์ง์ ์ ๋ฌธ์ ์์ ์์น์ ์ต๋๊ฐ์ธ 100000์ ๋์ง ์๋๋ก ํ๋ค.
(์ด๋ค ์์น n๊น์ง ๊ฐ๋ ์ต๋จ๊ฒฝ๋ก์ n์ ์ด๊ณผํ๋ ์์น๊ฐ ๋ค์ด๊ฐ ์๋ ์๊ธฐ๋ ํ์ง๋ง ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ ํ์์ผ๋๋ ์กด์ฌํ๊ณ (ex: 5->10->9) ํ์๊ฐ ์๋๋ผ๋ฉด n/2 ์ง์ ์์ 2๋ฐฐ๋ฅผ ํ ๊ฒ๋ณด๋ค n์ ์ด๊ณผํ ์์น์์ -1๋ก ์ด๋ํ๋ ๊ฒ ๋ ๋น ๋ฅผ ์๋ ์์ ๊ฒ์ด๋ค)
์๊ฐ๋ณต์ก๋๋ก ๋ฐ์ ธ๋ณธ๋ค๋ฉด ๋ง์ฝ ์ด๋ ๊ฒ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์๊ณ ์คํํ์ ๋๋ ๋ฐ๋ณต๋ฌธ ํ ํด๋น ๊ฒฝ๋ก๊ฐ 3๊ฐ์ง์ด๋ฏ๋ก ์๊ฐ๋ณต์ก๋๊ฐ O(3^n)์ด ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ ๊ฒฝ์ฐ์๋ ๊ฐ์ ์ ์ ์ ๋ ๋ฒ ์ด์ ๋ฐฉ๋ฌธํ์ง ์์ผ๋ฏ๋ก ์๊ฐ๋ณต์ก๋๊ฐ ํฌ๊ฒ ์ค์ด๋ ๋ค.
์ฌ๊ธฐ์๋ ๊ฐ์ ์ ๋ณด๋ฅผ ์ธ์ ํ๋ ฌ๋ก ์ ์ฅํ์ผ๋ฏ๋ก V๊ฐ์ ์ ์ ๊ณผ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ ๋ํด ์ฐ๊ฒฐ๋์๋์ง ์ฒดํฌํ๋ ์๊ฐ๊น์ง ์ด O(V^2)์ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฑธ๋ฆฐ๋ค.
์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ ์๊ฐ+๋ชจ๋ ๊ฐ์ ์ ๋ฐฉ๋ฌธํ๋ ์๊ฐ๋งํผ๋ง ๊ฑธ๋ฆฐ๋ค. ์ฆ ์๊ฐ๋ณต์ก๋๋ O(V+E)์ด ๋๋ค. (V: ์ ์ ๊ฐ์, E: ๊ฐ์ ๊ฐ์) BFS์ ๋ฐฉ๋ฌธ ํ๋ฆ์ ๊ทธ๋ํ๋ก ๊ทธ๋ ค๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
(์ฐธ๊ณ : https://www.acmicpc.net/board/view/47137)
ํ์ ๋ค์ด๊ฐ ์๋ฃํ์ pair<int, int>๋ฅผ ์ฌ์ฉํ๋ค. ๋ฌธ์ ํ ๋น์์๋ ์๊ฐ์ด ์ ๋์ ๋ค๋ฅธ ์๋ฃํ์ ์ฌ์ฉํ๋๋ฐ ์คํฐ๋์์ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ฃ๊ณ ๊ณ ์ณค๋ค.
์ค์ ์ฌ๋ฌ๋ฒ ํ์ด๋ดค๋ ์ ํ์ธ๋ฐ๋ ์ด๋ฒ์ ํ์์ ๋ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ๋ค์์ ์ค์๋ฅผ ๋ฒํ๋ค๋ ๊ฒ์ ๋ํด, ๊ทธ๋ฆฌ๊ณ ๊ธฐ์ต์ ์ ์ ๋์ง๋ง ๋ถ๋ช
์ด๊ฒ ์ฒ์ ํ ์ค์๋ ์๋์์ ๊ฒ์ด๋ผ๋ ์๊ฐ์ ์ข ๋ฐ์ฑํ๋ค.
๋๋ฌด ๊ธํ๊ฒ ํ๋ ค๊ณ ํด์ ๊ทธ๋ฌ์๊น? ์คํผ๋ํ๊ฒ ํธ๋ ๊ฒ๋ ์ค์ํ์ง๋ง ๊ทธ๋ณด๋ค ์ฐ์ ์์ฑํ ์๊ณ ๋ฆฌ์ฆ์ ๋นํ์ด ์๋์ง ์ข๋ ๊ผผ๊ผผํ๊ฒ ์ฒดํฌํ๋ฉฐ ํ๋๋ก ํ์. ๋ฐ์ํ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๊ฐ๋ฉด์โฆ
๊ทธ๋ฆฌ๊ณ ์๋ ์ฝ๋์์ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ pushํ ๋๊ฐ ์๋๋ผ popํ๋ ์์ ์์ ํด์คฌ๋๋ฐ ์ค๋ต์ ์๋์ง๋ง ์ญ์ pushํ ๋(=๋ฒ์์ฒดํฌํ ๋) ๊ฐ์ด ์ฒดํฌํ๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
์ฝ๋
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
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, k, cur_pos;
int cur_cnt = 0;
vector<bool> check;
queue<pair<int, int>> q;
cin >> n >> k;
check.assign(100001, false);
q.push({ n, cur_cnt });
while (!q.empty()) {
cur_pos = q.front().first;
cur_cnt = q.front().second;
q.pop();
if (cur_pos == k) break;
if (!check[cur_pos]) {
check[cur_pos] = true;
if (cur_pos - 1 >= 0) q.push({ cur_pos - 1, cur_cnt + 1 });
if (cur_pos + 1 <= 100000) q.push({ cur_pos + 1, cur_cnt + 1 });
if (cur_pos * 2 <= 100000) q.push({ cur_pos * 2, cur_cnt + 1 });
}
}
cout << cur_cnt;
}
2. ์คํํธ๋งํฌ
์ ๋ฌธ์ ์ ๋น์ทํ ๋ฌธ์ ์ด๋ ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์ด๋๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ์ ์ ๋ต์ด ๋์ค์ง ์์ ์๋ ์๋ ๋ฌธ์ ์ด๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ โuse the stairsโ๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค.
์๊ฐํด๋ณด๋ ์นด์ดํธ ๋ฐ์ดํฐ๊ฐ ์ด๊ธฐ๊ฐ(0)์ด ์๋๋ผ๋ฉด ๋ฐฉ๋ฌธํ๋ค๋ ์๋ฏธ๊ฐ ๋๋ฏ๋ก ๋ฐ๋ก ๋ฐฉ๋ฌธ ์ฒดํฌ ๋ฐฐ์ด์ ๋ง๋ค ํ์๊ฐ ์์ ๊ฒ ๊ฐ์ ์นด์ดํธ ๊ฐ์ผ๋ก ์ฒดํฌํ๋๋ก ํ๋ค. (๋จ ์์์ ์ 0์ด์ด์ผ ํ๋ฏ๋ก ์์์ ์ ์ ์ธ)
๋ฐ๋ผ์ ํ์ push๋๋ ์กฐ๊ฑด์ผ๋ก๋, ํ์ฌ์์น+U(์๋ก ์ด๋)์ ํ์ฌ์์น-D(์๋๋ก ์ด๋)์ ๋ํ์ฌ
1
2
3
โ ์ด๋ ํ์ ์์น๊ฐ S(์์์ )๊ฐ ์๋๊ณ
โก ๋ฐฉ๋ฌธํ์ง ์์๊ณ
โข ์ธต์์ ํ์ ๋์ง ์์ ๋(1~F์ผ ๋)
๊ฐ๊ฐ pushํ๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ต์ด ๋์ค์ง ์์์ ์๋ ์์ผ๋ฏ๋ก ๋ฐ๋ณต๋ฌธ์ด ์ข
๋ฃ๋ ํ ํ์ฌ ์์น๊ฐ G(๋ชฉํ์ง์ )๊ฐ ์๋๋ผ๋ฉด โuse the stairsโ๋ฅผ ์ถ๋ ฅํ๊ฒ ํ๋ค.
์ฝ๋
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
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int f, s, g, u, d, cur;
vector<int> cnt;
queue<int> q;
cin >> f >> s >> g >> u >> d;
cnt.assign(f + 1, 0);
cur = s;
q.push(s);
while (!q.empty()) {
cur = q.front();
q.pop();
if (cur == g) break;
int up = cur + u;
int down = cur - d;
if (up != s && up <= f && cnt[up] == 0) {
cnt[up] = cnt[cur] + 1;
q.push(up);
}
if (down != s && down > 0 && cnt[down] == 0) {
cnt[down] = cnt[cur] + 1;
q.push(down);
}
}
if (cur == g) cout << cnt[g];
else cout << "use the stairs";
}
3. ์ด๋ชจํฐ์ฝ
์ด ๋ฌธ์ ๋ ์์น๋ผ๋ ํํ์ด ์ด๋ชจํฐ์ฝ ๊ฐ์๋ก ๋ฐ๋์์ ๋ฟ ์ ๋ ๋ฌธ์ ์ ๋น์ทํ ์ ํ์ด์ง๋ง, ์ฌ๊ธฐ์๋ ๊ทธ ๋ณํ๋์ด ๊ฐ๋ณ์ ์ด๋ค. ํ์ฌ ํด๋ฆฝ๋ณด๋์ ๋ช ๊ฐ์ ์ด๋ชจํฐ์ฝ์ด ์ ์ฅ๋์ด ์๋์ ๋ฐ๋ผ ๋์ด๋๋ ๊ฐ์๊ฐ ๋ฌ๋ผ์ง๋ค.
๋ํ ํด๋ฆฝ๋ณด๋๋ฅผ ๋ณต์ฌํ๋ ํ์๋ ์นด์ดํธ์ ํฌํจ๋๋ค.
์ฌ์ค ๋๋ ๊ฐ์ฅ ๋จผ์ DP๋ฐฉ์์ ๋ ์ฌ๋ ธ๋ค. ํด๋ฆฝ๋ณด๋์์ ๋ช๊ฐ์ง๋ฆฌ๋ฅผ ๋ถ์ฌ๋ฃ์๋๋์ ๋ฐ๋ผ ๊ฐ์ ๊ฒฐ๊ณผ๋๋ผ๋ ์ฐ์ฐ ํ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ๋ค.
1
2
3
๋ฐ๋ณต๋ฌธ์ ํตํด ํ์ฌ ์
๋ ฅ๋ ์ด๋ชจํฐ์ฝ ๊ฐ์ ๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ์ด๋ชจํฐ์ฝ ๊ฐ์์ ๊ฒฝ์ฐ์ ๋ํ ์นด์ดํธ๋ฅผ ๊ตฌํ๋ค.
(ํ์ฌ ์
๋ ฅ๋ ์ด๋ชจํฐ์ฝ์ ์นด์ดํธ๊ฐ + ๋ณต์ฌ1๋ฒ + ๋ถ์ฌ๋ฃ๊ธฐ n๋ฒ)
์ด๋ ์ด๋ค ๊ฐ์์ ๋ํด ์นด์ดํธ๋ฅผ ์ฒ์ ๊ตฌํ๊ฑฐ๋ ์ด์ ์ ๊ตฌํ ์นด์ดํธ ๊ฐ๋ณด๋ค ์์ ๋๋ง ์นด์ดํธ๊ฐ์ ๊ฐฑ์ ํ๋ค.
์ด ์ดํ ์ด๋ชจํฐ์ฝ์ ํ๋ ์ญ์ ํ์ ๋์ ์นด์ดํธ๊ฐ๋ ๊ตฌํด์ ์ ๋์ผ ์กฐ๊ฑด์ผ๋ก ๋น๊ตํด ๊ฐฑ์ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๊ฑด ๋งํ๋ฏ์ด DP๋ผ์ BFS๋ก ํ๋ ค๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํด์ผ ํ๋๋ฐ, ์๋ฌด๋ฆฌ ์๊ฐํด๋ ์ ๋ฐฉ๋ฒ ๋ง๊ณ ๋ ๋ ์ค๋ฅด์ง ์์์ ์ ๊ธฐ๋ค BFS๋ฅผ ๋ง๋ ๋ต์๊ณ ๋ญ๊ฐ ๊ดด์ํ ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ด๊ณ ๋ง์๋คโฆ ํต๊ณผ๋ ํ์ง๋ง ํ์ ๋ฃ๋๋ค๊ณ BFS๊ฐ ๋๋๊ฒ ์๋๊ฒ์โฆ ์ํผ ๊ทธ๋์ ์คํฐ๋ ์ดํ ์ ๋๋ก ๋ BFS ๋ฐฉ์์ผ๋ก ๋ค์ ์ฝ๋๋ฅผ ์ง ๋ณด์๋ค. ์ด๋ฏธ ์คํฐ๋์ ์ธํฐ๋ท์์ ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ๋ด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ ์๋๋ ์ง์ ์๊ฐํด๋ธ ๋ด์ฉ์ ์๋๊ณ ๊ทธ๋ฅ ๋ณต์ต ๊ฒธ ํ๋ฆ์ ์ ๋ฆฌํด๋ดค๋ค.
์ผ๋จ ์์์ ๋งํ๋ ๊ฒ์ฒ๋ผ n๊ฐ์ ์ด๋ชจํฐ์ฝ์ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉํ ํด๋ฆฝ๋ณด๋ ๊ฒฝ๋ก๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ ์ ์๊ณ , ๊ฐ๊ฐ์ ๊ฒฝ๋ก์ ๋ํ ์ฐ์ฐ ํ์๋ ๋ค๋ฅผ ์ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก โn๊ฐ์ ์ด๋ชจํฐ์ฝ์ ๋ง๋ค๊ธฐ ์ํด ์ ํํ ์ด๋ค ๊ฒฝ๋กโ์ ๋ํ ์ฐ์ฐ ํ์๋ฅผ ๊ฒฝ๋ก๋ณ๋ก ์์์ผ ํ๋ค.
ํ ๋ฒ์ ์ฐ์ฐ์์ ์ ํํ ์ ์๋ ๊ฒฝ๋ก๋ 3๊ฐ์ง์ด๋ค.
1
2
3
โ ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ํด๋ฆฝ๋ณด๋๋ก ๋ณต์ฌ
โก ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ถ์ฌ๋ฃ๊ธฐ
โข ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ํ๋ ์ญ์
์ด๋ฅผ ํ๋ฉด์์์ ์ด๋ชจํฐ์ฝ ๊ฐ์(sn)์ ํด๋ฆฝ๋ณด๋์์์ ์ด๋ชจํฐ์ฝ ๊ฐ์(cn) ๋ณํ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
1
2
3
โ sn,cn -> sn,sn
โก sn,cn -> sn+cn,cn
โข sn,cn -> sn-1,cn
์ฆ ์ด์ ๋ฌธ์ ๋ค์์๋ ์์น๋ง ๋ณ๊ฒฝ๋์์ง๋ง ์ด ๋ฌธ์ ์์๋ ํ๋ฉด๊ณผ ํด๋ฆฝ๋ณด๋ ๋ ๊ฐ์ง๊ฐ ๋ณ๊ฒฝ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ ์นด์ดํธํ๋ค๋ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ฆฐ๋ค๋ฉด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
ํ์ ๋ค์ด๊ฐ ์๋ฃํ์ ๊ฐ์ธ์ ์ผ๋ก sn,cn์ ๋ฌถ๊ณ cnt๋ฅผ ๋ฐ๋ก ๋ ํํ๊ฐ ๋ง์์ ๋ค์ด์ ์ด์ค pair๋ฅผ ์ฌ์ฉํ๋ค.
์ฝ๋
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
#include<iostream>
#include<queue>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int s;
int cnt = 0;
bool check[1001][1001] = { false };
queue<pair<pair<int, int>, int>> q;
cin >> s;
check[1][0] = true;
q.push({ { 1,0 }, 0 });
while (!q.empty()) {
int sn = q.front().first.first;
int cn = q.front().first.second;
cnt = q.front().second;
if (sn == s) break;
q.pop();
if (sn > 0 && sn < 1001) {
// ํ๋ฉด์ ๋ด์ฉ์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ (sn,cn -> sn,sn)
if (!check[sn][sn]) {
check[sn][sn] = true;
q.push({ { sn, sn }, cnt + 1 });
}
// ํด๋ฆฝ๋ณด๋์ ๋ด์ฉ์ ํ๋ฉด์ ๋ถ์ฌ๋ฃ๊ธฐ (sn,cn -> sn+cn,cn)
if (sn + cn < 1001 && cn > 0 && !check[sn + cn][cn]) {
check[sn + cn][cn] = true;
q.push({ { sn + cn, cn }, cnt + 1 });
}
// ํ๋ฉด์ ์ด๋ชจํฐ์ฝ์ 1๊ฐ ์ญ์ (sn,cn -> sn-1,cn)
if (!check[sn - 1][cn]) {
check[sn - 1][cn] = true;
q.push({ { sn - 1, cn }, cnt + 1 });
}
}
}
cout << cnt;
}