그룹 단어 체커

문제

언어

  • JavaScript

문제 풀이 step 1

  • 문자열이 소문자로만 이루어져 있어서 ‘a’ ~ ‘z’의 개수를 셀 수 있도록 크기가 26인 배열을 준비합니다.
  • 문자열을 처음부터 순회하면서 이전 문자를 기억하면서 각 문자의 개수를 세줍니다.
  • 만약 현재 문자가 이전 문자와 다른데 문자열에서 그 문자의 개수가 0보다 크다면 그룹단어가 아닙니다.

소스 코드

const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");

const solution = (input) => {
	let T = parseInt(input[0]);
	const arr = input.slice(1, T + 1);

	let index = 1;
	let ans = 0;

	// 각 테스트케이스 마다
	while (T-- > 0) {
		const cntArr = Array(26).fill(0);
		const str = input[index++];

		let beforeChar = "";
		let check = true;

		for (let i = 0; i < str.length; i++) {
			let index = str.charCodeAt(i) - "a".charCodeAt(0);

			// 이전 문자와 다른데 cntArr가 0이 아니면 그룹단어가 아니다.
			if (beforeChar !== str[i] && cntArr[index] !== 0) {
				check = false;
				break;
			} else {
				cntArr[index]++;
				beforeChar = str[i];
			}
		}

		if (check) ans++;
	}

	return ans;
};

console.log(solution(input));