๋์ด๋ : ๊ณจ๋ 4
๊ฑธ๋ฆฐ ์๊ฐ : 40๋ถ
๋ฌธ์
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋ง์ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
2 ์ด | 256 MB | 49866 | 15734 | 9600 | 29.155% |
์ธ๋ก R์นธ, ๊ฐ๋ก C์นธ์ผ๋ก ๋ ํ ๋ชจ์์ ๋ณด๋๊ฐ ์๋ค. ๋ณด๋์ ๊ฐ ์นธ์๋ ๋๋ฌธ์ ์ํ๋ฒณ์ด ํ๋์ฉ ์ ํ ์๊ณ , ์ข์ธก ์๋จ ์นธ (1ํ 1์ด) ์๋ ๋ง์ด ๋์ฌ ์๋ค.
๋ง์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋ค ์นธ ์ค์ ํ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋๋ฐ, ์๋ก ์ด๋ํ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ์ ์ง๊ธ๊น์ง ์ง๋์จ ๋ชจ๋ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ๊ณผ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์ฆ, ๊ฐ์ ์ํ๋ฒณ์ด ์ ํ ์นธ์ ๋ ๋ฒ ์ง๋ ์ ์๋ค.
์ข์ธก ์๋จ์์ ์์ํด์, ๋ง์ด ์ต๋ํ ๋ช ์นธ์ ์ง๋ ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ด ์ง๋๋ ์นธ์ ์ข์ธก ์๋จ์ ์นธ๋ ํฌํจ๋๋ค.
ํ์ด
- ์ฃผ์! ์ ๋ ฅ์ด 20์ด๋ฏ๋ก ์ ์ง๋ง ๊ฒฝ๋ก ๋ฌธ์ ์ด๋ฏ๋ก ๊ธธ์ด์ง ์ ์์
- DFS๋ฅผ ์ฌ์ฉ
- ์ง๊ธ๊น์ง ๋์จ ์ํ๋ฒณ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- unordered_set
- int ๋ฐฐ์ด
์ฝ๋
#include <iostream>
#include <queue>
using namespace std;
int direction[4][2] = { {0,1}, {1,0}, {0, -1}, {-1, 0} };
int R, C;
char arr[21][21];
int visited[26];
int res = -1;
void dfs(int r, int c, int num) {
res = res < num ? num : res;
for (int i = 0; i < 4; i++) { // ์ํ์ข์ฐ ๋๋ฉด์
int rp = r + direction[i][0];
int cp = c + direction[i][1];
if (rp < 0 || cp < 0 || rp >= R || cp >= C) // ๋งต ๋ฐ์ ์์นํ๋ฉด ์ ์ธ
continue;
if (!visited[arr[rp][cp]-'A']) {
// ๊ฒฝ๋ก์ ์ด๋ฏธ ํฌํจ๋์ด ์๋ ๊ณณ์ ์ ์ธ
visited[arr[rp][cp] - 'A'] = 1;
num++;
dfs(rp, cp, num);
num--;
visited[arr[rp][cp] - 'A'] = 0;
}
}
}
int main() {
// ์
๋ ฅ ๋ฐ๊ธฐ
cin >> R >> C;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
cin >> arr[i][j];
}
}
fill(&visited[0], &visited[25], 0); // ์ด๊ธฐํ
visited[arr[0][0]-'A'] = 1;
dfs(0, 0, 1);
cout << res << '\n';
}
์ฃผ์ํ ์
- ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ์ง๋ง ํด๋น ์์น์์์ ๊ฐ๋ฅ ์ต๋ ๊ฒฝ๋ก๊ฐ ์ด์ ๊ฒฝ๋ก์ ์ข ์์ ์ด๋ฏ๋ก (ํด๋น ์์น๊น์ง์ ๊ฒฝ๋ก๊ฐ ๋ฌ๋ผ์ง๋ฉด ์์ผ๋ก ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ ๋ฌ๋ผ์ง๋ฏ๋ก) ๋ถ๊ฐ๋ฅ
- unordered_set์ผ๋ก ์ ์ฅํด๋ณด๋ ค๊ณ ํ์ง๋ง ์๊ฐ์ด๊ณผ๊ฐ ๋์ด => ๊ธฐ๋ณธ ๋ฐฐ์ด๋ก ํ๋ ๊ฒ์ด ์ข์
- unordered_set์ ์ฝ์ ์๊ฐ ๋ณต์ก๋ O(N)์ find ์๊ฐ ๋ณต์ก๋ O(N)์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฐฐ์ด๋ก ํ๋ฉด ํด๋น ์ํ๋ฒณ์ด ์ด๋ฏธ ๋์๋์ง ํ์ธํ๊ธฐ ์ํด O(1)์ ์๊ฐ๋ณต์ก๋๊ฐ ํ์ํ๋ค.
๊ฒฐ๊ณผ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 2206 :: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2021.05.11 |
---|---|
[c++] BOJ 16236 :: ์๊ธฐ ์์ด (0) | 2021.05.03 |
[c++] BOJ 10026 :: ์ ๋ก์์ฝ (0) | 2021.04.23 |
[c++] BOJ 14502 :: ์ฐ๊ตฌ์ (0) | 2021.04.22 |
[c++] BOJ 1238 :: ํํฐ (0) | 2021.04.21 |
Comment