백준 1316번 Node.js 문제풀이

Cho Dragoo·2021년 5월 25일
0
post-thumbnail

JavaScript 백준 온라인 알고리즘 공부

백준 1157 번 Node.js 문제풀이

그룹 단어 체커
https://www.acmicpc.net/problem/1316



본인이 제출한 답안

const fs = require("fs");
const [N, ...arr] = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `4
abbbbbb
abaccccccccc
abccctcccffff
aaaaaj
`
)
  .trim()
  .split("\n");

let numWords = Number(N);
let count = 0;

for (let i = 0; i < numWords; i++) {
  let newArr = [];
  let nowArr = arr[i];

  for (let j = 0; j < nowArr.length; j++) {
    if (newArr.indexOf(nowArr[j]) === -1 || nowArr[j - 1] === nowArr[j]) {
      newArr += nowArr.slice(j, j + 1);
    } else {
      break;
    }
  }

  if (newArr.length === nowArr.length) {
    count++;
  }
}

console.log(count);


풀이과정 소감

  • 입력된 문자배열nowArr과 대조할 새배열newArr를 생성해두고 기존에 없는 문자newArr.indexOf(nowArr[j]) === -1이거나 왼쪽 요소안의 문자와 같으면nowArr[j - 1] === nowArr[j] 비교한 요소를 새배열에 집어 넣었다.newArr += nowArr.slice(j, j + 1)

    이렇게하면 조건에 맞지 않는건 새배열에 들어가지 못하고 비교했던 입력배열과 길이가 달라지고 그룹단어가 아니므로 카운트하지 않는다 .

    반대로 모두 조건에 충족하면 당연히 배열의 길이는 서로 같아지므로newArr.length === nowArr.length 카운트 count++하게된다.

    이렇게 카운트를 마친 숫자가 곧 그룹단어의 갯수console.log(count)가 된다.

  • 기존의 배열을 놔두면서 새배열을 완성해 나아가는 메서드를 여전히 햇갈려서 좀 고생을 했다. 이 경우는 Array.prototype.slice()가 확실히 쓰임새가 있다. 요소 하나하나 넣는거면 +=의 연산자도 빼먹으면 안된다.

  • 새배열에 들어가는 조건을 충족 못할 때 바로 break 문을 추가해 남은 배열순회를 막았다. 없어도 문제를 통과할 수 있지만 단 한번이라도 배열에 안넣으면 그 배열은 이미 그룹단어로서 실격이라 그 이상 순회비교하는게 낭비이므로 적절한 코드임은 틀림없다.

profile
어떤 문제든 파악 할 수 있으며 해결책을 찾을 수 있는 개발능력을 꿈꾸고 있습니다.

0개의 댓글