https://programmers.co.kr/learn/courses/30/lessons/49993
- 첫 스킬의 존재 유무를 먼저 확인.
- 첫 스킬 존재할 시,
1) 첫 스킬보다 뒷 스킬을 먼저 배우는지 확인
2) 중간 스킬을 건너뛰고 중간 스킬 이후 스킬을 먼저 배우는지 확인
3) 1, 2에 해당되지않을 때 비로소 가능함- 첫 스킬이 존재하지 않을 시,
1) 첫 스킬을 건너뛰고 뒷 스킬을 먼저 배우는지 확인
2) 주어진 스킬을 전부 배우지 않고 아예 다른 스킬들의 조합으로만 한다면 가능함.
function solution(skill, skill_trees) {
var answer = 0, remem2 = 0;
skill = skill.split("");
var tOrf;
for(var i = 0; i < skill_trees.length; i++){
//첫 스킬 배웠을 때,
if(skill_trees[i].indexOf(skill[0]) > -1){
var remem = -1;
for(var j = 0; j < skill.length; j++){
if(skill_trees[i].indexOf(skill[j]) > -1){
//첫 스킬보다 뒷 스킬을 먼저 했는지 확인
if(skill_trees[i].indexOf(skill[j]) > remem){
remem = skill_trees[i].indexOf(skill[j]);
//중간 스킬 건너 뛰고 그 이후 스킬했는지 확인
if(j-remem2 <= 1){
tOrf = true;
remem2 = j;
}else{
tOrf = false;
break;
}
}
else{
tOrf = false;
break;
}
}
}
if(tOrf)
answer++;
}
//첫 스킬 안배웠을 때,
else{
var cnt = 0;
for(var j = 1; j < skill.length; j++){
//주어진 스킬을 하나도 안하고 전혀 다른 스킬들로 구성된 것도 가능한 것이기 때문에 그 부분 확인중
if(skill_trees[i].indexOf(skill[j]) == -1){
cnt++;
}
//첫 스킬은 안하고 뒷 스킬부터 배울 때,
else{
break;
}
}
if(cnt == skill.length-1)
answer++;
}
}
return answer;
}
- 다른분들은 조건 많이 거치지않고도 하셨던데 조금 무식하게 코딩한 것 같아 아쉬움이 남는 코드
멋져욤 : )