백준 1316번 그룹 단어 체커 - node.js

fgStudy·2022년 4월 19일
0

코딩테스트

목록 보기
17/69
post-thumbnail

해당 포스팅은 백준 1316번 그룹 단어 체커 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였다.


문제

문제 설명

  • 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다.
  • 예제
    • ccazzzzbb
      ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이다.
    • aabbbccb
      aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력

  • [첫째 줄]: 단어의 개수 N (1 ≤ N ≤ 100)
  • [둘째 줄 ~ N개의 줄]: 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

출력

첫째 줄에 그룹 단어의 개수를 출력한다.


풀이

문자열에 같은 알파벳이 연속해서 나온다면 그룹단어, 하나라도 떨어져서 나타날 시 그룹단어가 아니다. 입력값으로 주어지는 단어들 중 그룹단어에 해당되는 개수를 출력하면 된다.

따라서 인덱스 i의 원소와 인덱스 i+1의 원소가 다를 시, 뒤에서 인덱스 i의 원소와 동일한 원소가 나오면 해당 단어는 그룹단어가 아니다.

그러므로 먼저 단어 개수인 N을 그룹단어 개수로 초기화한 다음 각 단어를 위의 로직을 통해 검증하자. 단어 리스트를 돌면서 유효하지 않은 단어의 경우 N -= 1을 하면 그룹단어의 개수를 확인할 수 있다.


전체 코드

const input = require('fs').readFileSync('/dev/stdin').toString().split('\n').slice(0, -1);
// 단어 개수인 N을 그룹단어 개수로 초기화
let N = Number(input.shift());
// 단어 리스트
const parsed = [...input];

// 단어리스트 loop
for (let el of parsed) {
    const len = el.length-1;
    // 단어 요소 loop
  	for (let i=0; i < len; i++) {
        // 인덱스 i와 i+1 값이 다를 경우,
        if (el[i] !== el[i+1]) {
            // 인덱스 i+2 이후에 인덱스 i와 동일한 알파벳이 나올 경우 그룹단어가 아니다.
            const test = el.slice(i+2);
            if (test.includes(el[i])) {
              	// 그룹단어 제거
                N--;
                break;
            }
        }
    }
}

console.log(N);
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글