
먼저 skill.indexOf(c)를 사용하여, 현재 문자 c가 선행 스킬 목록인 skill에 포함되어 있는지를 확인하였다.
만약 포함되어 있고, q.poll()로 꺼낸 다음 배워야 할 스킬과 c가 다르다면, 순서가 올바르지 않다고 판단하여 check를 false로 설정하였다.
시간복잡도: O(), 공간복잡도: O()
- [ x ] 1회
- [ x ] 2회
- 3회
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
Queue<Character> q = new LinkedList<>();
for(int i=0;i<skill_trees.length;i++){
for(char ch : skill.toCharArray()){
q.offer(ch);
}
boolean check = true;
for(int j=0;j<skill_trees[i].length();j++){
char c = skill_trees[i].charAt(j);
if(skill.indexOf(c)!=-1){ //존재하지 않을때는 스킵
if(q.isEmpty() || c!=q.poll()){
check = false;
break;
}
}
}
if(check) answer++;
q.clear();
}
return answer;
}
}

String skill = "CBD";
String cur = "BACDECBD";
cur.replaceAll(skill, ""); // 결과: "BACDE"
String skill = "CBD";
String cur = "BACDE";
cur.replaceAll("[^"+skill+"]", ""); // 결과: "BCD"
String skill = "CBD";
String cur = "CBDAX";
cur.replaceAll("^" + skill, ""); // 결과: "AX"
class Solution {
int [] inDegree;
public int solution(String skill, String[] skill_trees){
int answer = 0;
for(int i=0;i<skill_trees.length;i++){
StringBuilder sb = new StringBuilder();
for(char c : skill_trees[i].toCharArray()){
if(skill.contains(String.valueOf(c))){
sb.append(c);
}
}
if(skill.startsWith(sb.toString())){
answer++;
}
}
return answer;
}
}