-
[백준/javascript] 1303 전투코딩테스트 2023. 2. 27. 16:24
const fs = require("fs"); const filepath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; let stdin = fs.readFileSync(filepath).toString(); const input = stdin.split("\n").map((v) => v.split(" ")); // // 첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다. // 그 다음 두 번째 줄에서 M+1번째 줄에는 각각 (X, Y)에 있는 병사들의 옷색이 띄어쓰기 없이 주어진다. // 모든 자리에는 병사가 한 명 있다. B는 파란색, W는 흰색이다. 당신의 병사와 적국의 병사는 한 명 이상 존재한다. // N명이 뭉쳐있을때느 N^2의 위력! // 대각선으로만 뭉친 병사는 뭉쳐있지 않은것임. const [a, ...b] = input; const [N, M] = a.map(Number); const map = b.map((el) => el[0].split("")); // WBWWW // WWWWW // BBBBB // BBBWW // WWWWW const visited = {}; const score = { scoreW: [], scoreB: [] }; function solution() { for (let i = 0; i < M; i++) { for (let j = 0; j < N; j++) { if (!visited[[i, j]]) { bfs(i, j); } } } return [ score.scoreW.map((el) => Math.pow(el, 2)).reduce((prev, cur) => prev + cur), score.scoreB.map((el) => Math.pow(el, 2)).reduce((prev, cur) => prev + cur), ]; } function bfs(y, x) { const dy = [-1, 1, 0, 0]; const dx = [0, 0, -1, 1]; let current = [y, x]; let queue = [[y, x]]; visited[[y, x]] = true; let currentArr; if (map[y][x] === "W") { currentArr = score.scoreW; } else currentArr = score.scoreB; currentArr.push(1); while (queue.length) { //얘가 돌면서 확인해주는 애임.... current = queue.shift(); for (let i = 0; i < 4; i++) { let ny = current[0] + dy[i]; let nx = current[1] + dx[i]; if ( ny >= 0 && nx >= 0 && ny < M && nx < N && !visited[[ny, nx]] && map[ny][nx] === map[current[0]][current[1]] ) { queue.push([ny, nx]); visited[[ny, nx]] = true; currentArr[currentArr.length - 1]++; } } } return score; } //bfs 이용해서 한칸씩 이동함. 같은 팀일경우에만 이동함. // 이동하면서 추가함. 이미 방문했으면 추가 x. // W , B 배열 각각 만들어서 추가함. console.log(...solution());
좀 더 런타임시간을 줄여보고자 갖은 노력을 하였으나... 줄어들지 않았다... 왜...?ㅠㅠ
'코딩테스트' 카테고리의 다른 글
[프로그래머스/javascript] 피로도 (꼭!!! 다시풀기 못풀었음) (0) 2023.03.02 [프로그래머스/javascript] 3차 압축 (0) 2023.02.28 [백준/javascript] 2178 미로 (다시 풀기) (0) 2023.02.27 [프로그래머스/javascript] 프린터 (0) 2023.02.18 [프로그래머스/javascript] 프린터 (0) 2023.02.18