본문 바로가기

PS

[Programmers] LV2 - 스킬 트리

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

 

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

 

programmers.co.kr

 

문제 파악

 

유저들이 만든 스킬 트리가 선행 스킬에 맞는 스킬 트리인지 판단하고 개수를 RETURN 해주면 된다.

문제를 푸는 아이디어는 주어진 스킬트리에서 선행 스킬이 아닌 문자를 ReplaceAll로 제거하고 그 문자에서 선행 스킬의 IndexOf가 0이 아니라면 제거해주는 식 (선행 스킬의 순서와 맞지 않음)으로 풀었다.

 

처음 통과한 소스

 

더보기
import java.util.*;
class Solution {
    public int solution(String skill, String[] skill_trees) 
    {
        
        int answer = 0;
        
        int loop = skill_trees.length;
        
        for(int idx =0; idx<loop;idx++)
        {
            // 선행 스킬 순서가 없으면 아무렇게나 배워도 상관 없음
            if(skill.length() == 0){
                answer++;
            }
            else
            {
                String str = "";
                int len = skill_trees[idx].length();
                for(int r = 0; r <len;r++ )
                {
                    char c = skill_trees[idx].charAt(r);
                    if(skill.indexOf(c)!=-1){
                        str+= c+"";
                    }
                }
                String regex = skill.substring(0,str.length());
                
                if(str.indexOf(regex)!=-1){
                    answer++;
                }
            }
        }
        return answer;
    }
}

 

두 번째로 통과한 소스

 

더보기
import java.util.*;
class Solution {
    public int solution(String skill, String[] skill_trees) 
    {
        
        int answer = 0;
        
        ArrayList<String> list = new ArrayList<>(Arrays.asList(skill_trees));
        
        Iterator<String> it = list.iterator();
        
        while(it.hasNext())
        {
            String str = it.next().replaceAll("[^"+skill+"]","");
            if(skill.indexOf(str)!=0){
                it.remove();
            }
        }
        answer = list.size();
        return answer;
    }
}