문제링크
https://www.acmicpc.net/problem/10026
문제풀이
적록색약이 아닌 사람이 보는 NxN Grid 2차원배열(map1 > R,G,B 모두 존재) 과
적록색약이 보는 NxN Grid 2차원배열(map2 > G,B만 존재 ) 를 각각 만든뒤
두 2차원 배열을 탐색(bfs, dfs) 하면서 그룹핑하면 색상 영역의 수를 도출할 수 있다.
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let N = Number(input.shift());
let map1 = [];
let map2 = [];
let map1GroupCnt = 0;
let map2GroupCnt = 0;
input.forEach((line) => {
map1.push(line.split(""));
map2.push(line.replaceAll("R", "G").split(""));
});
let makeGroup = (now_row, now_column, group_color, ref_map) => {
let diffRow = [0, 0, 1, -1];
let diffCol = [1, -1, 0, 0];
for (let i = 0; i < 4; ++i) {
let nextRow = now_row + diffRow[i];
let nextColumn = now_column + diffCol[i];
if (ref_map[nextRow] && ref_map[nextRow][nextColumn] && ref_map[nextRow][nextColumn] === group_color) {
ref_map[nextRow][nextColumn] = "X";
makeGroup(nextRow, nextColumn, group_color, ref_map);
}
}
};
for (let row = 0; row < N; ++row) {
for (let column = 0; column < N; ++column) {
if (map1[row][column] !== "X") {
let color = map1[row][column];
map1[row][column] = "X";
makeGroup(row, column, color, map1);
++map1GroupCnt;
}
if (map2[row][column] !== "X") {
let color = map2[row][column];
map2[row][column] = "X";
makeGroup(row, column, color, map2);
++map2GroupCnt;
}
}
}
let answer = `${map1GroupCnt} ${map2GroupCnt}`;
console.log(answer);
'🔒Algorithm' 카테고리의 다른 글
백준[node.js] > 11279번 최대 힙 (0) | 2024.12.31 |
---|---|
백준[node.js] > 14940번 쉬운 최단거리 (0) | 2024.12.30 |
백준[node.js] > 2667번 단지번호붙이기 (1) | 2024.12.22 |
백준[node.js] > 2805번 나무 자르기 (1) | 2024.12.21 |
백준[node.js] > 2630번 색종이 만들기 (0) | 2024.12.20 |