๋ฌธ์
์ธ๋ก R์นธ, ๊ฐ๋ก C์นธ์ผ๋ก ๋ ํ ๋ฌ์์ ๋ณด๋๊ฐ ์๋ค. ๋ณด๋์ ๊ฐ ์นธ์๋ ๋๋ฌธ์ ์ํ๋ฒณ์ด ํ๋์ฉ ์ ํ ์๊ณ , ์ข์ธก ์๋จ ์นธ (1ํ 1์ด) ์๋ ๋ง์ด ๋์ฌ์๋ค.
๋ง์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋ค ์นธ ์ค์ ํ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋๋ฐ, ์๋ก ์ด๋ํ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ์ ์ง๊ธ๊น์ง ์ง๋์จ ๋ชจ๋ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ๊ณผ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์ฆ, ๊ฐ์ ์ํ๋ฒณ์ด ์ ํ ์นธ์ ๋ ๋ฒ ์ง๋ ์ ์๋ค.
์ข์ธก ์๋จ์์ ์์ํด์, ๋ง์ด ์ต๋ํ ๋ช ์นธ์ ์ง๋ ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ด ์ง๋๋ ์นธ์ ์ข์ธก ์๋จ์ ์นธ๋ ํฌํจ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ R๊ณผ C๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 ≤ R,C ≤ 20)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ง์ด ์ง๋ ์ ์๋ ์ต๋์ ์นธ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3 6
HFDFFB
AJHGDH
DGAGEH
์์ ์ถ๋ ฅ 1
6
๐ ํ์ด ์ฝ๋
const fs = require('fs');
const file = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(file).toString().trim().split('\n');
const [r, c] = input[0].split(' ').map(Number);
const arr = [];
for (let i = 1; i <= r; i++) arr.push(input[i]);
const dx = [0, 0, 1, -1];
const dy = [1, -1, 0, 0];
const visited = new Array(26).fill(false);
let maxDepth = 0;
function dfs(depth, x, y) {
maxDepth = Math.max(maxDepth, depth);
for (let i = 0; i < 4; i++) {
const nx = x + dx[i];
const ny = y + dy[i];
if (nx < 0 || nx >= r || ny < 0 || ny >= c) continue;
if (visited[arr[nx][ny].charCodeAt() - 65]) continue;
visited[arr[nx][ny].charCodeAt() - 65] = true;
dfs(depth + 1, nx, ny);
visited[arr[nx][ny].charCodeAt() - 65] = false;
}
}
visited[arr[0][0].charCodeAt() - 65] = true;
dfs(1, 0, 0);
console.log(maxDepth);
๐ ํ์ด ํด์ค
์ฐ๋ฆฌ๊ฐ ํ์ํ ์ ์๋ ์กฐ๊ฑด์ ํ์์ ๋ฒ์ด๋์ง ์๋ ๋ฒ์์ ๋ฐฉ๋ฌธํ์ง ์์๋ ์ํ๋ฒณ์ผ๋ก ํ์์ ํ ์ ์๋ค.
์ํ์ข์ฐ๋ก ๊ฐ ์ ์๋์ง ํ์ํ๊ธฐ ์ํด ๋จผ์ dx, dy ํ ํฌ๋์ ํ์ฉํด์ 4 ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๋ ์ขํ๊ฐ ํ์ํ๋ค.
๋จผ์ , dfs ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์ฒซ๋ฒ์งธ ์ถ๋ฐ์ ๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ถ๋ฐ์ ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ฃผ๊ณ ์์ํ๋ค.
dfs ํจ์๋ ๊น์ด์ ๋ค์ ์ด๋ํ x, y ์ขํ๊ฐ ์ธ์๋ก ํ์ํ๋ค.
ํ์ฌ ์ด๋ํ ๊น์ด(ํ์ ๋ฒ์)๊ฐ ์ด์ ์ด๋ํ๋ ๊น์ด(ํ์ ๋ฒ์)๋ณด๋ค ํฌ๋ค๋ฉด ํ์ฌ ๊น์ด์ ๊ฐ์ผ๋ก ๋ด์์ค๋ค.
dfs ํจ์์์๋ ๋ฐฉ๋ฌธ์ด ๊ฐ๋ฅํ์ง ๊ฒ์ฌ ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ ํ ํธ์ถ์ด ๋๋๋ฉด ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ณผ์ ์ ์์ด์, ASCII์ฝ๋๋ก ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์๋ค.
์ฒ์์ ๋ฐฐ์ด์ ๊ฐ์ push, pop ํ๋ ํํ๋ก ํ์๋๋ฐ, ์ด๋ ๊ฒ ํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋์ด์ ์ ๋ต ์ฒ๋ฆฌ๋ฅผ ๋ฐ์ง ๋ชปํ์๋ค.
๊ทธ๋์ ๋๋ฌธ์ ์ํ๋ฒณ์ ๋ํ ๊ฐ์ ๋ฃ๊ธฐ ๋๋ฌธ์ ASCII์ฝ๋๋ฅผ index๋ก ํ์ฉํด์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
๋๋ฌธ์ ์ํ๋ฒณ์ ASCII ์ฝ๋๋ 65 ~ 90๊น์ง์ด๊ธฐ ๋๋ฌธ์ ASCII์ฝ๋์ -65๋ฅผ ํด์ค์ผ๋ก์จ 0~25๊น์ง ๋ฐฐ์ด์ ํตํด ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์๋ค.
์ด๋ ๊ฒ ๋ฐ๋ก index๋ก ์ ๊ทผํด์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐฉ๋ฌธ์ ํ๋์ง ํ์ธํ๊ธฐ ์ํ ์ฐ์ฐ์ ์๊ฐ๋ณต์ก๋๋ O(1)์ด ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ต๋ ๊น์ด์ ๊ฐ์ ๋ด์๋์๋ maxDepth๋ฅผ ์ถ๋ ฅํ๋ฉด ์ ๋ต ์ฒ๋ฆฌ๋ฅผ ๋ฐ์ ์ ์๋ค.