Algorithm λ¬Έμ /BOJ
[c++] BOJ 1987 :: μνλ²³
ν¬μw
2021. 4. 28. 21:31
λμ΄λ : 골λ 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)μ μκ°λ³΅μ‘λκ° νμνλ€.
κ²°κ³Ό
λ°μν