skill:String
, skill_trees[]:String
가능한 스킬 트리의 개수를 return 하는 문제이다.
skill에는 선행스킬의 순서가 들어있는 문자열이므로 주어진 스킬트리에서 skill의 각 요소가 순서대로 등장해 선행스킬을 만족했는지 index를 체크하는 방법으로 문제를 풀었다.
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = skill_trees.length;
int pre_index = 0, cur_index = 0;
for(int i = 0; i<skill_trees.length; i++){
pre_index = skill_trees[i].indexOf(skill.charAt(0));
for(int j = 1; j<skill.length(); j++){
cur_index = skill_trees[i].indexOf(skill.charAt(j));
if((pre_index>cur_index&&cur_index!=-1)||(pre_index==-1&&cur_index!=-1)){
answer--;
break;
}
pre_index = cur_index;
}
}
return answer;
}
}
선행스킬을 만족하는지 확인하는 부분이 까다로웠는데 내가 푼 코드는 👆이렇다.
string.indexOf(data)
는 string
에 data
가 시작하는 인덱스를 return 하는데, 만약 data가 없다면 -1을 반환한다.
skill에 주어지는 순서대로라면 pre_index<cur_index여야 하는데 이 스킬들이 존재하지 않는 경우까지 고려하여 선행스킬만족 조건을 생각해보면 아래와 같다.
선행스킬이 만족하지 못하면 처음에 answer = skill_trees.length
로 셋팅해놓은 answer--;
하고 break
하는 식으로 진행했다. 꼭 break 해줘야 한다.
처음에는 answer=0
으로 하고 가능한 스킬트리인 경우에 answer++
하는 식으로 하려고했는데 선행스킬이 만족하는 경우가 만족하지 않는 경우보다 많아서 위의 방식으로 코딩했다.