https://school.programmers.co.kr/learn/courses/30/lessons/49993
단순 구현(문자열)
언뜻 보기에는 위상정렬을 사용하는 문제처럼 보일 수 있다.
하지만 자세히 본다면 단순 문자열 처리로 풀 수 있다.
문제를 가장 단순하게 이해해 본다면,
skill
로 주어지는 문자열의 순서를 skill_trees
의 원소가 지키고 있는것인가 이다.
입력 예시를 살펴보자.
skill : "CBD"
skill_trees : ["BACDE", "CBADF", "AECB", "BDA"]
C의 인덱스 < B의 인덱스 < D의 인덱스를 만족시키면 가능한 스킬트리이다.
Java의 경우, String class의 indexOf() 함수를 이용하여 특정 글자가 가장 처음 등장하는 index를 얻을 수 있다.
이를 바탕으로 비교하면 된다.
주의할점은 만약 예제의 B 처럼 중간에 등장하는 문자가 존재하지 않을 경우, index 정보를 최대치로 할당해주면 된다.
B의 다음에 존재하는 스킬의 경우, B가 없으면 배울 수 없기 때문에 index값 처리에 신경을 쓰도록 하자.
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
char[] cstr = skill.toCharArray();
for(String s : skill_trees){
int base = -2;
boolean flag = true;
for(char c : cstr){
int next = s.indexOf(c);
if(next == -1) // 다음에 나오는 스킬들은 모두 배울 수 없다.
next = Integer.MAX_VALUE;
if(base > next){
flag = false;
break;
}
base = next;
}
if(flag)
answer++;
}
return answer;
}
}