[JS] 백준 1316. 그룹 단어 체커

n-u·2022년 8월 14일
0

Algorithm

목록 보기
33/33
post-thumbnail

백준 1316. 그룹 단어 체커

https://www.acmicpc.net/problem/1316

제출한 풀이

const fs = require("fs");
const file = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(file).toString().split("\r\n");
let count = 0;

for (let i = 1; i <= input[0]; i++) {
  let arr = [];
  let string = input[i].split("");
  for (let j = 0; j < string.length; j++) {
    if (!arr.includes(string[j])) {
      arr.push(string[j]);
    }
    if (string[j - 1] === string[j]) arr.push(string[j]);
  }

  if (arr.join("") === input[i]) count++;
}
console.log(count);

문제 풀이 강의
https://www.youtube.com/watch?v=btH6nvpvO2k

문제 개념

입력 받은 단어가 1개 또는 연속 중복 될때의 단어를 "그룹단어"라 칭한다.
즉, 'a', 'b' / 'aab', 'abbbcccc' 는 모두 다 "그룹단어"이다.
하지만, 'aba'와 같은 단어는 이미 나온 철자가 있으므로, "그룹단어"가 아니다.

  • 각 단어를 받은 후 철자로 쪼갠다.
  • 빈 배열에 각 절차의 유무를 비교 후 배열에 담긴 철자들을 입력 받았던 단어와 비교한다.
  • 그렇게 되면 나중에 같은 철자가 나와도 중복되지 한 번만 배열에 담기게 된다.
  • 중복된 철자 그룹의 조건식을 세워 연속으로(인덱스값사용) 중복된 철자를 배열에 담도록 한다.
  • 입력 받은 단어와 배열의 값이 같다면 count를 올린다면, 제시한 단어 중에 그룹단어의 조건에 맞는 단어의 개수를 알 수 있다.

문제 풀이 과정

  1. 문자를 split()를 이용해 철자으로 쪼갠다.
  2. 쪼갠 철자를 빈 배열에includes를 사용하여 배열안에 쪼갠 철자의 유무를 판단 후 push를 해주되, 배열에 이미 있는 철자라면 push하지 않도록 한다.
  3. 다만, 중복 철자("pp, cccc, dd")등 과 같은 연속적인 철자는 조건(string[j - 1] === string[j])을 걸어 push해준다.
  4. 각 단어의 철자는 for문이 다 돌게 되면, 빈배열에 담겨진 각 철자은 join()메서드를 이용해 한 단어로 만든다.
  5. 만들어진 단어를 입력 받은 단어와 같다면 count의 값을 올려준다.

문제를 풀면서 알게 된 것

  • 주어진 조건 및 입력값을 충분히 활용하면 문제를 풀 수 있다.
  • includes()
profile
기록하며 발전하는 삶

0개의 댓글