๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป
article thumbnail
๋ฐ˜์‘ํ˜•

[๋ฐฑ์ค€]1987๋ฒˆ '์•ŒํŒŒ๋ฒณ' ๋ฌธ์ œ ํ’€์ด - JavaScript

๋ฌธ์ œ

์„ธ๋กœ 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๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ์ •๋‹ต ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•
profile

๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป

@์šฉ๋‡ฝ

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!