스킬트리에 있는 스킬들의 순서가 올바른지 선행 관계를 확인 하는 문제이다.
skill
에서 한문자 skill_trees[i]
에서 한문자씩 비교하며 skill
에 없는 문자는 건너뛰고 있으면 순서를 비교하는 로직을 구현했었다.
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
for(String skill_tree : skill_trees){
int skill_index = 0;
boolean right_skill = true;
for(char now : skill_tree.toCharArray()){
int now_index = skill.indexOf(now);
if(now_index == -1)
continue;
if(now_index != skill_index){
right_skill = false;
break;
}
skill_index++;
}
if(right_skill)
answer++;
}
return answer;
}
}
정규표현식으로 스킬트리를 비교하는 로직이 있어서 참고했다.
replaceAll("[^" + skill + "]", "")
skill에 없는 문자들을 공백으로 수정(삭제)하는 정규표현식이다.
if (skill.indexOf(it.next().replaceAll("[^" + skill + "]", "")) != 0) { it.remove(); }
skill에 없는 문자들은 삭제되었으므로 skill에 있는 문자들이 순서에 맞게 배치되었는지 확인하고 순서가 일치하지 않으면 삭제 한다.
answer = skillTrees.size();
올바르게 찍힌 스킬트리는 배열에 남은 스킬트리들 뿐
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = -1;
ArrayList<String> skillTrees = new ArrayList<String>(Arrays.asList(skill_trees));
Iterator<String> it = skillTrees.iterator();
while(it.hasNext())
if(skill.indexOf(it.next().replaceAll("[^"+skill+"]","")) !=0) //1.skill에 없는 문자 삭제
it.remove(); //2. skill에 있는 문자들 순서 확인
answer = skillTrees.size(); //리스트에 남은 스킬트리들
return answer;
}
}