본문 바로가기
Problem Solving/boj.kr (JS)

[BOJ / 자바스크립트] 1316 : 그룹 단어 체커

by hoiiiii 2022. 2. 26.

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

Sol )

  1. 문자가 연속적으로 입력된다는 뜻은, 한 번 이상 문자 입력 후 다른 문자가 입력된 다음 다시 나오지 않는다는 뜻
  2. 길이 26의 cnt 배열 (cnt_arr) false로 초기화
  3. result = 0
  4. 단어 입력 횟수만큼 순회하면서 반복문 안에서 flag (그룹 단어인지 여부 확인용 변수)로 활용할 변수 check_bool 선언
  5. 문자열을 순회하면서 cnt 배열의 문자 아스키코드 - 'a' 아스키코드 인덱스 추출
  6. 만약 인덱스가 바뀌면 이전 인덱스 값 true로 변경
  7. cnt [인덱스] 값이 true라면 1번 조건을 위배하므로 반복을 종료하고 flag( 코드에서 check_bool ) 값에 체크해준 뒤 다음 단어에 대해 탐색
  8. 모든 탐색 종료시까지 조건을 충족했다면 (flag = check_bool = true 라면) result += 1
  9. 최종 result 출력

소스코드 )

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
let result = 0;
let cnt_arr;
let idx, check_bool, prev_idx;
for (let i = 1 ; i<input.length -1 ; i++){
  cnt_arr = new Array(26).fill(false);
  check_bool = true;
  prev_idx = input[i][0].charCodeAt(0) - "a".charCodeAt(0);
  for (let j = 1 ; j<input[i].length ; j++){
      idx = input[i][j].charCodeAt(0) - "a".charCodeAt(0);
      if (cnt_arr[idx]){
        check_bool = false;
        break;
      }
      if (prev_idx !== idx){
        cnt_arr[prev_idx] = true;
      }
      prev_idx = idx;
  }
  if (check_bool){
    result++;
  }
}
console.log(result);

댓글