문제 번호 : 2210번
문제 바로가기 ☞ https://www.acmicpc.net/problem/2210
<<< 문제 내용 >>>
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\r\n');
// 표준입력 테스트를 위해 이렇게 했지만 제출을 위해서는
// split('\r\n') 에서 \r은 제거하고 제출해야합니다.
const tables = input.map(el=> el.split(' '));
let visited = Array.from(Array(tables.length), () => Array(tables.length).fill(0));
let arr = [];
const dy = [-1,1,0,0];
const dx = [0,0,-1,1];
for(let i=0; i< tables.length; i++){
for(let j=0; j<tables.length; j++){
dfs(0, i, j, '');
}
}
const set = new Set(arr);
const setarr = [...set];
console.log(setarr.length);
function dfs(count/*재귀횟수*/, y, x, str){
if(count==6){
arr.push(str);
return;
}
else{
str += tables[y][x];
for(let i=0; i<4; i++){
ay = y+ dy[i];
ax = x+ dx[i];
if(ay<0 || ay>=tables.length || ax<0 || ax>=tables.length){
continue;
}
dfs(count+1, ay, ax, str);
}
}
}
* 기본적으로 브루트포스로 전부 찾아야하는 문제입니다. DFS로 탐색하면서 재귀횟수가 6번이되면 멈추도록 하고, 6번이 됐을때 저장된 내용을 기입한 후 함수를 종료합니다.
* 고려해야할 점은 중복이 가능하다는 점(visited 사용x)과 배열의 테두리를 넘어가는 방향은 제거해주어야 합니다.
도움이 되셨다면 공감 부탁드립니다.