๋ฌธ์
์ธ๋ก ๐ ์นธ, ๊ฐ๋ก ๐ถ์นธ์ผ๋ก ๋ ํ ๋ชจ์์ ๋ณด๋๊ฐ ์๋ค. ๋ณด๋์ ๊ฐ ์นธ์๋ ๋๋ฌธ์ ์ํ๋ฒณ์ด ํ๋์ฉ ์ ํ ์๊ณ , ์ข์ธก ์๋จ ์นธ (1ํ 1์ด) ์๋ ๋ง์ด ๋์ฌ ์๋ค.
๋ง์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋ค ์นธ ์ค์ ํ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋๋ฐ, ์๋ก ์ด๋ํ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ์ ์ง๊ธ๊น์ง ์ง๋์จ ๋ชจ๋ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ๊ณผ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์ฆ, ๊ฐ์ ์ํ๋ฒณ์ด ์ ํ ์นธ์ ๋ ๋ฒ ์ง๋ ์ ์๋ค.
์ข์ธก ์๋จ์์ ์์ํด์, ๋ง์ด ์ต๋ํ ๋ช ์นธ์ ์ง๋ ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ด ์ง๋๋ ์นธ์ ์ข์ธก ์๋จ์ ์นธ๋ ํฌํจ๋๋ค.
ํ์ด
์ ํ์ ์ธ ๋ฐฑํธ๋ํน๋ฌธ์ ์ด๋ค.
(0,0) ๋ถํฐ ์์ํด์ ์ค๋ณต๋์ง ์๋ ์ํ๋ฒณ์ด ๋์ฌ ๊ฒฝ์ฐ ํ์นธ์ฉ ๊ฐ ์ ์๋ ๋ฌธ์ ๋ก ์ฌ๊ท์ ๊น์ด์ ๋ฐ๋ฅธ ์๊ฐ๋ณต์ก๋๋ฅผ ์ฃผ์ํด์ผ๋๋ ๋ฌธ์ ์ด๋ค.
์ ํํ ์ฆ๋ช ์ ๋ชปํ๊ฒ ์ง๋ง, ์ํ๋ฒณ์ ๊ฐ์๋ ์ด 26๊ฐ์ด๋ฏ๋ก ์ต๋ 26์นธ์ ๋ฐฉ๋ฌธํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์นธ์ ํ๋ฒ์ฉ๋ง ๋ฐฉ๋ฌธํ ์ ์์ผ๋ฏ๋ก O(R * C)๋ก ์๊ฐํ๊ณ ๊ตฌํํ๋ค.
์ฝ๋
#include <iostream>
#include <string>
using namespace std;
int R, C, dx[4]={0,1,0,-1}, dy[4]={1,0,-1,0}, ans=0;
string board[21];
void func(int i, int j, int a, int* alpha) {
for(int dir=0; dir<4; dir++) {
int nx = i + dx[dir];
int ny = j + dy[dir];
if(nx<0||nx>=R||ny<0||ny>=C) continue;
if(alpha[board[nx][ny]-'A']) continue;
alpha[board[nx][ny]-'A'] = 1;
func(nx, ny, a+1, alpha);
alpha[board[nx][ny]-'A'] = 0;
}
ans = max(ans, a);
}
int main() {
cin>>R>>C;
for(int i=0; i<R; i++)
cin>>board[i];
int alpha[26] = {0};
alpha[board[0][0] - 'A'] = 1;
func(0,0,1,alpha);
cout<<ans;
}
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2151 (0) | 2024.06.18 |
---|---|
๋ฐฑ์ค 28325 (0) | 2024.06.13 |
Codeforces Round 938 (Div. 3) (0) | 2024.05.02 |
๋ฐฑ์ค 1630 (0) | 2024.04.08 |
BOJ 3197 (0) | 2024.03.24 |