다음과 같이 풀었다.
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let result = 0;
for (let i = 1; i < input.length; i++) {
const charArr = input[i].split("");
let flag = true;
charArr.forEach((char) => {
if (charArr.indexOf(char) !== charArr.lastIndexOf(char)) {
const sliced = charArr.slice(
charArr.indexOf(char),
charArr.lastIndexOf(char) + 1
);
const getSlicedEl = [...new Set(sliced)];
if (getSlicedEl.length !== 1) {
flag = false;
}
}
});
if (flag) result++;
}
console.log(result);
오늘 복습한 함수 : array.slice()
기존의 배열을 건드리지 않으면서 배열의 특정 범위를 잘라내 새 배열을 반환한다.
위 식에서는 charArr에서 char이 find된 첫번째 인덱스와 마지막 인덱스가 다를 경우,
slice로 첫번째 인덱스부터 마지막 인덱스까지의 범위를 잘라낸 뒤 set으로 중복값을 제거해서 그 length가 하나인지 검사한다.
하나가 아니면? aba처럼 중간에 다른 문자가 낀 경우이므로 flag false 처리, 하나이면 aaa같은 경우이므로 검사를 통과한다.