캐또's coding

1316 - 그룹 단어 체커 - node.js 본문

기초 공부/백준 문제 풀이

1316 - 그룹 단어 체커 - node.js

JS_K_coding 2022. 8. 23. 11:19

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net


첫 줄에는 테스트케이스의 갯수, 다음 줄부터 테스트케이스가 들어온다. 그룹단어가 몇 개인지 최종 출력하면 되는 문제인데, 그룹단어는 알파벳들이 따로 떨어지지 않은 것을 말한다. a, ab, aab는 그룹단어지만 aba, abba는 그룹단어가 아니다.

 

쉽게 생각해보면 각 테스트케이스 줄마다의 단어를 ''로 나누고, 반복문을 돌리면서 하나씩 빈 문자열에 추가해주고, 반복문마다 문자열에 있는지 includes()로 찾

 

간단히 생각한다면 지금까지 문제를 해결했던 방법과 마찬가지로 문제의 첫 줄로 전체 반복의 횟수를 잡고, 다음 줄부터 다시 문자를 ''를 기준으로 나눠 array를 만든 뒤 반복문을 돌리면 될 것이다. 반복문 안에서는, 만약 지금 반복문으로 돌리고 있는 문자가 새로운 array에 중복되는 것이 있는지 찾아서 만약 중복 값이 있다면 지금 반복문 인덱스의 -1요소와 지금 도는 요소가 같은지 검사한다. 

그러니 곧,

1. 지금 반복문에 들어온 값이 새 array에 없다 => 체크 필요 없이 array에 추가해줄 것

2. 지금 반복문에 들어온 값이 새 array에 있다?

2.1. 그리고 지금 들어온 값과 -1 인덱스의 값이 같다 => 연속등장중이니 그냥 넘어감

2.2. 그리고 지금 들어온 값과 -1 인덱스의 값이 다르다 => 그룹단어 아니므로 패스

3. 반복문 종료 후 count +1

4. 모든 반복문 종료 후 count 출력

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");
let count = 0;
let result = [];
for (let i = 1; i < Number(input[0]) + 1; i++) {
  let splitChar = input[i].trim().split("");
  result = [];
  for (let j = 0; j < splitChar.length; j++) {
    if (!result.includes(splitChar[j])) {
      result.push(splitChar[j]);
    } else if (splitChar[j] != splitChar[j - 1]) {
      count--;
      break;
    }
  }
  count++;
}
console.log(count);

조건문에서 지금까지 추가한 result라는 새 array에 중복값이 있다면 else if문으로 넘어갈텐데 거기서 비교해본 뒤 break를 걸어줘야 단어의 나머지에 대해서 반복이 돌지 않아 정답으로 나오게 된다. break의 필요성..

'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글

2292 - 벌집 - node.js  (0) 2022.08.24
1316 - 손익분기점 - node.js  (0) 2022.08.23
2941 - 크로아티아 알파벳 - node.js  (0) 2022.08.23
5622 - 다이얼 - node.js  (0) 2022.08.22
2908 - 상수 - node.js  (0) 2022.08.22
Comments