티스토리 뷰

Link

코딩테스트 연습 - 스킬트리

Code

class Solution {
   public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        Skilldata[] skillPrev = new Skilldata[skill_trees.length];
        for(int i =0 ; i < skillPrev.length ; i++){
            skillPrev[i] = new Skilldata();
        }


        for(int i = 0 ; i<skill.length() ; i++){
            for(int j =0 ; j< skill_trees.length; j++){
                for(int k = 0 ; k< skill_trees[j].length();k++){
                    if(skill_trees[j].charAt(k) == skill.charAt(i)){
                        if(i == 0 ){
                            skillPrev[j].skill =  skill.charAt(i);
                            skillPrev[j].date = k;
                        }
                        else{
                             if(skill.charAt(i-1)==skillPrev[j].skill && skillPrev[j].date <k){
                                skillPrev[j].skill =  skill.charAt(i);
                                skillPrev[j].date = k;
                            }
                            else{
                                skillPrev[j].bool = true;
                            }
                        }

                    }
                }
            }
        }
        for(int i = 0 ; i< skillPrev.length; i++){
             if(!skillPrev[i].bool){
                answer++;
            }
        }
        return answer;
    }
}

class Skilldata{
    char skill;
    int date;
    boolean bool;
    
}

 

Explain

1. Class를 생성하여 배운 스킬을 순서대로 입력할 skill 그것의 위치 date 정상적인 스킬을 찍었는지 확인하는 bool을 Class를 생성

2. Skill_trees들은 각각 Skilldata Class로 판단해야기 때문에 Skill_trees크기만큼 선언

3. 첫 스킬은 누구나 다 배울 수 있으므로 입력하고 다음 스킬 부터 이전 스킬에 무엇을 선택했는지 파악과 이전 스킬이 이후 스킬보다 나중에 찍었는지 파악하여 거짓이라면 boolean으로 분별

4. boolean으로 참인 데이터만 count