https://programmers.co.kr/learn/courses/30/lessons/49993
function solution(skill, skill_trees) {
let answer = skill_trees.length;
// let trees = [];
// for (let i = 0; i < answer; i++) {
// trees.push([]);
// }
// for (let i = 0; i < skill_trees.length; i++) {
// let tmp = skill_trees[i].split('');
// for (let j = 0; j < tmp.length; j++) {
// if (skill.includes(tmp[j])) { trees[i].push(tmp[j]); }
// }
// }
// console.log(trees);
let trees = skill_trees
.map((el) => {
return el.split('').filter((s) => skill.includes(s));
})
for (let i = 0; i < trees.length; i++) {
for (let j = 0; j < trees[i].length; j++) {
if (skill[j] != trees[i][j]) {
answer--;
break;
}
}
}
return answer;
}
const skill = "CBD" ;
const skill_trees = ["BACDE", "CBADF", "AECB", "BDA"]
console.log(solution(skill, skill_trees));
처음에 정규표현식을 사용해서 해결하려고 했는데 순서대로 어떻게 알지하고 고민하다가 다른 방법을 생각해보았다.
skill의 순서만 맞으면 그 문자 앞뒤로는 뭐가 와도 괜찮겠다라고 생각이 들었다.
그래서 skill_trees에 들은 문자열에서 skill의 문자열만 순서대로 trees에 담았다.
const skill = "CBD" ;
const skill_trees = ["BACDE", "CBADF", "AECB", "BDA"]
trees 모습
[ [ 'B', 'C', 'D' ], [ 'C', 'B', 'D' ], [ 'C', 'B' ], [ 'B', 'D' ] ]
이제 skill의 CBD와 비교하면서 순서대로 했을 때 skill과 tree가 다르면 answer에서 1개씩 -1시켜서 정답을 도출시킨다.
정답 후 다른 사람들의 코드를 보면서 trees를 만들 때 코드를 고쳤다.
처음 trees를 만들 때 반복문을 사용해 만들었는데 map과 filter를 이용해 고쳐보았다.
// 처음 trees
let trees = [];
for (let i = 0; i < answer; i++) {
trees.push([]);
}
for (let i = 0; i < skill_trees.length; i++) {
let tmp = skill_trees[i].split('');
for (let j = 0; j < tmp.length; j++) {
if (skill.includes(tmp[j])) { trees[i].push(tmp[j]); }
}
}
console.log(trees);
// 수정 후
let trees = skill_trees
.map((el) => {
return el.split('').filter((s) => skill.includes(s));
})
function solution(skill, skill_trees) {
var answer = 0;
var regex = new RegExp(`[^${skill}]`, 'g');
return skill_trees
.map((x) => x.replace(regex, ''))
.filter((x) => {
return skill.indexOf(x) === 0 || x === "";
})
.length
}
처음에 정규표현식을 이용해 풀고 싶었다고 했엇는데 다른 사람코드 중에 정규표현식을 이용해 푼 코드가 있어 가져와봤다.