Print
카테고리: [ Algorithm ]
조회수: 80880

 

 
문제 풀이 : 검사할 스킬트리의 전체 개수를 정답으로 저장해놓고, 필수 스킬트리의 제약조건을 위반하면 개수에서 차감하는 방식으로 해결한다
1. 검사할 스킬트리 안, 필수 스킬의 첫번째 스킬의 인덱스를 startIdx에 저장한다
2. 검사할 스킬트리 안, 필수 스킬의 다음번째 스킬의 인덱스를 currentIdx에 저장한다
참고사항 : '배열'.indexOf('검사 값')에서 '검사 값'이 해당 '배열'에 존재하지 않으면 -1을 리턴
 
제약조건에 위반하는 경우 
1. if(startIdx> currentIdx && currentIdx != -1)
 : 첫번째 선행스킬이 다음번째 스킬보다 뒤늦게 나옴과 동시에 다음번째 선행스킬은 존재해야함 (다음번째 선행스킬이 없으면 -1을 저장하기 때문)
 
2. if(startIdx== -1 && currentIdx != -1)
 : 첫번째 선행스킬이 없음과 동시에 다음번째 선행스킬은 존재해야함 (선행스킬이 없으면 통과)
 
소스코드 :
public class Skill {
    public int solution(String skill, String[] skill_trees) {
        int answer = skill_trees.length;
        int startIdx = 0;
        int currentIdx = 0;
        for (int i = 0; i < skill_trees.length;i++){
            startIdx = skill_trees[i].indexOf(skill.charAt(0));
            for (int j = 1 ; j < skill.length();j++){
                currentIdx = skill_trees[i].indexOf(skill.charAt(j));
                if ((startIdx > currentIdx && currentIdx != -1) || (startIdx == -1 && currentIdx != -1)){
                    answer--;
                    break;
                }
                startIdx = currentIdx;
            }
        }
        return answer;
    }
}