- ํธ๋ฆฌ
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- LCs
- DP
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- BFS
- ๋นํธ๋ง์คํน
- DFS
- ์นด์นด์ค2021
- ์น๋ฆฐ์ด
- Union-Find
- nestjs
- go
- ์์ฝ๋
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐฑ์ค
- js
- ์ด๋ถํ์
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ๋ค์ต์คํธ๋ผ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- Python
- C++
- ์ํฐ๋
- ๋นํธ๋งต
- golang
- ์นด์นด์ค ์ฝํ
- ์ฌ๊ท
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 17370. ์ก๊ฐํ ์ฐ๋ฆฌ ์์ ๊ฐ๋ฏธ ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/17370
๋ฌดํํ ๋ง์ ์ ์ก๊ฐํ์ด ์๋ก ๋ง๋ฟ์ ๋์ธ ํํ์ ๊ฐ๋ฏธ ์ฐ๋ฆฌ๊ฐ ์๋ค. ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ํํ์ด๊ณ , ํ์์ ๋ณ์ผ๋ก๋ง ๊ฐ๋ฏธ๊ฐ ๋ค๋ ์ ์๋ค.
๊ณค์ถฉ ๊ด์ฐฐ์ด ์ทจ๋ฏธ์ธ ์ ์ด๋ ์ธ ์ ์ก๊ฐํ์ด ์๋ก ๋ง๋ฟ์ ์๋ ์ด๋ค ์ ์์ ๊ฐ๋ฏธ๋ฅผ ํ๋ ์ฌ๋ ธ๋ค. ์ด๋ ๊ฒ ์ฐ๋ฆฌ์ ์ฌ๋ผ์จ ๊ฐ๋ฏธ๋ ๊ทธ ์์ ์๊ฒ ๋ฏธ์ง์ ์์ญ์ธ ์ฐ๋ฆฌ๋ฅผ ํ๋ก๋ชฌ์ ๋ฟ๋ฆฌ๋ฉฐ ํ์ํ๊ธฐ ์์ํ๋ค. ์ฒ์ ๊ฐ๋ฏธ๋ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ธ ๋ณ ์ค ํ๋๋ฅผ ํฅํด ์ด๋์ ์์ํ๋๋ฐ, ํธ์๋ฅผ ์ํด ์ด ์ฒซ ๋ฒ์งธ ์ด๋์ด ๋ถ์ชฝ์ ํฅํ๋๋ก ๋๋ ค์ ๋ณด์.
๋ง์ฝ ๊ฐ๋ฏธ๊ฐ ๋ณ์ด ์ธ ๊ฐ๋๋ก ๊ฐ๋ผ์ง๋ ์ ์ ๋์ฐฉํ๋ฉด, ์์ ์ด ์ด๋ํด์จ ๋ณ์ ์ ์ธํ ๋๋จธ์ง ๋ ๋ณ ์ค ํ๋๋ฅผ ๊ณจ๋ผ ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ์ฌ ํ์์ ๊ณ์ํ๋ค.
์ฐ๋์์ ์์ ์ง์ , ์ด๋ก์์ ๊ฐ๋ฏธ๊ฐ ํ์ํ๋ฉฐ ํ๋ก๋ชฌ์ ๋ฟ๋ฆฐ ๊ฒฝ๋ก. ๊ฒ์์์ ๊ฐ๋ฏธ, ์ฃผํฉ์์ ๋ค์ ์ด๋์ ์ํด ์ ํ ๊ฐ๋ฅํ ๋ ๋ณ์ ๋ํ๋ธ๋ค.
๊ฐ๋ฏธ๊ฐ ์ด์ ์ ๋ฐฉ๋ฌธํ๋, ์ฆ, ํ๋ก๋ชฌ์ด ๋ฟ๋ ค์ง ์ง์ ์ ๋์ฐฉํ๋ฉด ์ด๊ณณ์ด ์ด๋ฏธ ์ต์ํ ์์ญ์ด๋ผ๋ ์ฐฉ๊ฐ์ ๋น ์ง๊ณ ๋ ์ด์์ ํ์์ ๋ฉ์ถ๋ค. ์ด๋ ๊ฒ ํ์์ ๋ฉ์ท์ ๋, ๋ฐฉํฅ์ ํ์ ํ ํ์๊ฐ ์ ํํ N๋ฒ์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด๋ณด์.
๋ฐฉํฅ์ 7๋ฒ ํ์ ํ๋ ๋ ๊ฒฝ๋ก. ํ๋ก๋ชฌ์ ๊ถค์ ์ ๋์ผํด๋ ๊ฐ๋ฏธ์ ์ด๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ณํ๋๋ก ํ๋ค.
ํ์ด
DFS๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด
์ก๊ฐํ ๋ชจ์์ ๋งต์, ์๋์ ๊ฐ์ด 2์ฐจ์ ๋ฐฐ์ด์ ๋ํ๋ด์๋ค.
ํธ์๋ฅผ ์ํด ์ด ์ฒซ ๋ฒ์งธ ์ด๋์ด ๋ถ์ชฝ์ ํฅํ๋๋ก ๋๋ ค์ ๋ณด์. ๋ผ๊ณ ๋ฌธ์ ์ ๋์์์ผ๋ฏ๋ก,
์์ํ ๋๋ ์ง์ ์ด๋์ด 1๋ฒ์ด๋์ด๋ผ๊ณ ์๊ฐํ๊ณ 4๋ฒ ์ด๋๊ณผ 2๋ฒ์ด๋์ด ๊ฐ๋ฅํ ์ํ๋ก ์์ํ๋ค.
(ํ์ง๋ง ์ ์ฒซ๋ฒ์งธ ์ด๋์ N์ ์ธ๋ ํ์์๋ ํฌํจ๋์ง ์์ผ๋ฏ๋ก ์ฃผ์)
์๋ฌดํผ, ์ก๊ฐํ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ํ๋ด๊ณ ,
์ง์ ์ด๋์ ๋ฐ๋ผ ๋ค์์ ์ด๋์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ๋ฐฐ์ด๋ก ๋ง๋ค์ด๋๊ณ ์ฌ์ฉํด์ DFS๋ฅผ ๋๋ ธ๋ค.
DFS๋ฅผ ๋๋ฆฌ๋ค๊ฐ ์ด๋ํ์๊ฐ N์ธ๋ฐ, ์ง์ ์ ๋ฐฉ๋ฌธํ ์์น์ด๋ฉด ๋ต์ +1 ํด์ฃผ์๋ค.
N์ ์ต๋๊ฐ์ด 22์ด๋ฏ๋ก, ๋งต์ ํฌ๊ธฐ๋ ๋๊ฐ 101์ผ๋ก ํด์ฃผ๊ณ
(50,50)์์ (49,50)์ผ๋ก ์ฒซ๋ฒ์งธ ์ด๋์ ํ๋ค๊ณ ์๊ฐํ๊ณ ํด๋น ์์น์์ DFS๋ฅผ ์์ํ๋ค.
์ฝ๋
#include <iostream>
using namespace std;
int N;
bool visited[101][101];
int answer = 0;
//last => 0:↑, 1:↓, 2:โ, 3:โ, 4:โ, 5:โ
int route[6][2][2] = { {{-1,-1},{-1,1}}, {{1,-1},{1,1}}, {{-1,0},{1,1}}, {{1,0},{-1,-1}}, {{1,-1},{-1,0}}, {{-1,1},{1,0}} };
int lasts[6][2] = { {4, 2}, {3, 5}, {0, 5}, {1, 4}, {3, 0}, {2, 1} };
void DFS(int r, int c, int count, int last) {
for (int i = 0;i < 2;i++) {
int dr = route[last][i][0];
int dc = route[last][i][1];
int now = lasts[last][i];
int nextR = r + dr;
int nextC = c + dc;
if (count + 1 == N) {
if (visited[nextR][nextC]) answer++;
continue;
}
if (!visited[nextR][nextC]) {
visited[nextR][nextC] = 1;
DFS(nextR, nextC, count + 1, now);
visited[nextR][nextC] = 0;
}
}
}
int main() {
ios::sync_with_stdio(false); cin.tie(NULL);
cin >> N;
//0 ๋ฒ์งธ ์ด๋ 50,50 -> 49,50
visited[50][50] = 1;
visited[49][50] = 1;
DFS(49, 50, 0, 0);
cout << answer << endl;
return 0;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/๋ฐฑ์ค] 22352. ํญ์ฒด ์ธ์ (0) | 2021.09.14 |
---|---|
[๋ฐฑ์ค/C++] 14725. ๊ฐ๋ฏธ๊ตด (0) | 2021.09.07 |
[๋ฐฑ์ค/C++] 1941. ์๋ฌธ๋ ์น ๊ณต์ฃผ (0) | 2021.08.24 |
[๋ฐฑ์ค/C++] 1405. ๋ฏธ์น ๋ก๋ด (0) | 2021.08.17 |
[๋ฐฑ์ค/C++] 17182. ์ฐ์ฃผ ํ์ฌ์ (0) | 2021.08.17 |