https://www.acmicpc.net/problem/1316
우선 단어의 철자 하나 씩 indexOf를 통해 현재 철자 이후에 있는지 확인 한다.
있다면 현재 index 다음이 맞는지 확인한다. 아니라면 break로 그룹단어가 아니라고 인식한다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().split('\n');
let result = 0;
for (let i = 1; i <= input[0]; i++){
let a = input[i].split('');
for (let j = 0; j < a.length; j++){
if (a.indexOf(a[j], j + 1) === -1){
if(a.length - 1 === j){ // a의 마지막 글자라면
result++;
}
continue;
}else if(a.indexOf(a[j], j + 1) === j + 1){
continue;
}else{
break;
}
}
}
console.log(result);
var N = parseInt(input.shift());
var count = 0;
function solution(str){
var record = [];
for(var i = 0, length = str.length; i < length; i++){
if(record.indexOf(str[i]) === -1){
record.push(str[i]);
} else {
if(record[record.length -1] !== str[i]){
return;
}
}
}
count++;
}
for(var i = 0; i < N; i++){
solution(input[i])
}
console.log(count);
사실 이런 문제를 여러번 봤던거 같다. 매번 어렵게 생각하고 문제를 풀었던거 같다.
모범답안에서는 확실히 내가 풀었던 것보다 간단한 알고리즘으로 모든 경우의 수를 확인 할 수 있다.
비슷한 문제가 많은 것처럼 해당 방법은 이해하고 외워둬야겠다.