728x90
문제
https://www.acmicpc.net/problem/1972
풀이
이 문제는 주어진 각 문자열을 순회하며 현위치의 문자와 정해진 거리만큼 떨어져있는 문자를 합친 문자열의 중복 확인한 문제이다.
중복 확인은 Set 객체를 이용했으며, Set 객체 사용 연습을 위해 사용했다.
코드
const input = require('fs')
.readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt')
.toString().trim().split('\n').map(e => e.split(' ').map(Number))
const [n] = input.shift();
let map = input.slice();
let answer = 0;
const sum = (arr) => {
let que = [];
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] === 0) continue;
else if (arr[i] === arr[i + 1]) {
que.push(arr[i] * 2);
arr[i + 1] = 0;
}
else {
que.push(arr[i]);
}
}
if (arr[arr.length - 1] !== 0) que.push(arr[arr.length - 1]);
return que;
};
const obj = {
move0: (arr) => {
for (let i = 0; i < n; i++) {
let line = [];
for (let j = 0; j < n; j++) {
if (arr[i][j] !== 0) {
line.push(arr[i][j]);
arr[i][j] = 0;
}
}
if (line.length > 0) {
const sumResult = sum(line);
for (let j = 0; j < sumResult.length; j++) {
arr[i][j] = sumResult[j];
}
}
}
return arr;
},
move1: (arr) => {
for (let i = 0; i < n; i++) {
let line = [];
for (let j = n - 1; j >= 0; j--) {
if (arr[i][j] !== 0) {
line.push(arr[i][j]);
arr[i][j] = 0;
}
}
if (line.length > 0) {
const sumResult = sum(line);
for (let j = 0; j < sumResult.length; j++) {
arr[i][n - 1 - j] = sumResult[j];
}
}
}
return arr;
},
move2: (arr) => {
for (let i = 0; i < n; i++) {
let line = [];
for (let j = 0; j < n; j++) {
if (arr[j][i] !== 0) {
line.push(arr[j][i]);
arr[j][i] = 0;
}
}
if (line.length > 0) {
const sumResult = sum(line);
for (let j = 0; j < sumResult.length; j++) {
arr[j][i] = sumResult[j];
}
}
}
return arr;
},
move3: (arr) => {
for (let i = 0; i < n; i++) {
let line = [];
for (let j = n - 1; j >= 0; j--) {
if (arr[j][i] !== 0) {
line.push(arr[j][i]);
arr[j][i] = 0;
}
}
if (line.length > 0) {
const sumResult = sum(line);
for (let j = 0; j < sumResult.length; j++) {
arr[n - 1 - j][i] = sumResult[j];
}
}
}
return arr;
}
};
const copyArray = (arr) => {
let copied = [];
arr.forEach((v) => {
copied.push([...v]);
});
return copied;
};
const dfs = (arr, cnt) => {
if (cnt === 5) {
arr.forEach(e => {
answer = Math.max(answer, ...e);
})
return;
}
else {
for (let i = 0; i < 4; i++) {
let copied = copyArray(arr);
dfs(obj[`move${i}`](copied), cnt + 1);
}
}
};
dfs(map, 0);
console.log(answer);
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[Node.js] 15686_치킨배달 (0) | 2024.05.08 |
---|---|
[Node.js] 15683_감시 (0) | 2024.05.06 |
[Node.js] 12100_2048(Easy) (0) | 2024.05.03 |
[Node.js] 14503_로봇 청소기 (0) | 2024.05.02 |
[Node.js] 14888_연산자 끼워넣기 (0) | 2024.05.01 |