본문 바로가기
JS/백준

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

by 박기린 2023. 3. 24.

안녕하세요. 박기린 입니다.

백준 1316그룹 단어 체커 문제를 풀어봅시다.

 

 

문제 링크

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

 

 

 


문제 해석

'그룹 단어'라는 말이 이 문제의 핵심 단어입니다.

 

위의 메모를 살펴보면,

- a, b, c의 갯수는 상관 없고 (1개만 있어도 상관 없습니다.)
- 같은 글자는 뭉쳐 있어야 하며, 만약 하나라도 떨어져 있으면 그룹 단어가 아닙니다.

 

 

 

 

 

 


정답 코드

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [amount, ...strings] = input;
let result = 0;

const isGroupWord = (arr) => {
  let words = [];
  let isRight = true;
  arr.forEach((e) => {
    const isExist = words.find((c) => c == e);
    if (isExist) {
      e !== words.pop() ? (isRight = false) : words.push(e);
    } else {
      words.push(e);
    }
  });

  return isRight;
};

strings.forEach((e) => {
  isGroupWord(e.split("")) && result++;
});

console.log(result);

 

 

 

 

 

 


정답 코드 풀이

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [amount, ...strings] = input;

fs 모듈로 입력을 받은 후, split('\n')으로 줄바꿈 기준으로 Array에 담습니다.

그리고 Array 비구조화를 이용해서, 첫째 줄은 amount(n), 그 이후 줄은 strings Array에 담습니다.

 

 

 

const isGroupWord = (arr) => {
  let words = [];
  let isRight = true;
  arr.forEach((e) => {
    const isExist = words.find((c) => c == e);
    if (isExist) {
      e !== words.pop() ? (isRight = false) : words.push(e);
    } else {
      words.push(e);
    }
  });

  return isRight;
};

그 다음, isGroupWord()라는 함수를 선언합니다. 이 함수는 string을 글자 단위로 나눈 Array를 인수로 받습니다. 인수로 받은 Array를 arr이라고 칭하겠습니다.

 

 

 

 

  arr.forEach((e) => {
  
  { ... }
  
      } else {
      words.push(e);
    }

arr에 forEach()를 이용해서 각 요소에 접근을 합니다. 각 글자를 words라는 Array에 넣습니다.

 

 

 

 

  arr.forEach((e) => {
    const isExist = words.find((c) => c == e);
    if (isExist) {
      e !== words.pop() ? (isRight = false) : words.push(e);

만약, 이미 words Array에 존재하는 글자라면, words.pop()을 실행합니다.

Pop한 글자가 forEach()에서 현재 접근 중인 요소와 같은 글자라면, '그룹 단어'의 조건에 위배되지 않습니다.

그런데 같지 않다면, 이미 글자가 존재하면서 서로 이어진 상태가 아니기 때문에, '그룹 단어'의 조건에 위배됩니다.

 

조건에 위배될 경우 isRight 변수를 false로 바꿉니다.

 

 

 

 

  return isRight;

그리고 함수가 종료되면, isRight 변수를 return 합니다.

 

 

 

 

 

strings.forEach((e) => {
  isGroupWord(e.split("")) && result++;
});

strings ArrayforEach()를 이용해서 각 요소에 접근합니다.

단어들을 split('')을 이용해서 글자 단위로 나눈 뒤 Array에 저장한 후, isGroupWord() 함수에 넣습니다.

그 후 실행 결과를 적절한 방식으로 출력합니다.

반응형