하루에 한 문제

[프로그래머스-lv2 Summer/Winter Coding(~2018)]스킬트리 -Java 본문

알고리즘/프로그래머스 lv2 다시풀기

[프로그래머스-lv2 Summer/Winter Coding(~2018)]스킬트리 -Java

dkwjdi 2021. 3. 29. 23:45

https://programmers.co.kr/learn/courses/30/lessons/49993

 

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

 

programmers.co.kr

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        int skillLen=skill.length(); //스킬의 길이 
        
   loop: for(int i=0; i<skill_trees.length; i++){
            int skillIndex=0;
            String skill_tree=skill_trees[i];
            for(int j=0; j<skill_tree.length(); j++){ //하나의 스킬트리의 길이만큼
                int check=skill.indexOf(skill_tree.charAt(j));
                
                if(check==-1) continue; //-1이면 skill과 상관없음 그냥 넘어감
                else if(check==skillIndex){
                    skillIndex++;
                }
                else continue loop; //체크와 인덱스가 다르면 선행스킬을 안배웠다는 뜻
            }
            answer++; //위의 포문을 나왔다는 뜻은 스킬트리를 잘 배웠다는 뜻
       
        }
        
        
        return answer;
    }
}

소요시간 : 7분

 

오늘 백준에 주사위윷놀이 문제를 2시간 가까이 풀었는데... 로직을 잘못짠거를 발견해서..

내일쯤이나 다시 풀어볼 예정입니다..ㅜㅜㅜㅜ

이제 IDE없이 프로그래머스에서 바로 문제 푸는게 조금씩 익숙해지는 것같습니다...ㅎㅎ

 

로직을 살펴보면 skillIndex라는 변수를 통해서 선행스킬을 배웠는지 안배웠는지 확인합니다

skillIndex는 0에서 부터 skill.length()-1까지 증가하면서 선행스킬을 배웠는지 확인하는 용도입니다

 

1. skill_tree의 글자가 skill에 포함되는지 확인합니다. (String.indexOf 사용)

2. 만약 -1이라면 (글자가 포함되어 있지 않다면) 선행스킬과 관계없는 스킬이기 때문에 그냥 skip해줍니다.

3. 만약 -1이 아니라면 현재 skillIndex와 같은지 확인합니다. 만약 다르다면 선행스킬을 배우지 않은것임으로

   그 skilltree는 skip해줍니다.

4. 만약 skillIndex와 값이 같다면 선행스킬을 차근차근 배우고 있는 중임으로 그다음을 확인해줍니다.

 

끝~~~

 

Comments