프로그래머스[Level2] - 스킬 트리 [Summer/Winter Coding(~2018)] :: 매운코딩
728x90
300x250

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

 

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

 

programmers.co.kr

단순 문자열 charAt 함수를 통해서 처리하였다.

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        
        for(int n = 0; n<skill_trees.length;n++) {
            String str = skill_trees[n];
            boolean flag = false;
            int pt = 0; // 현재 순서 포인터
            for(int i = 0;i<str.length(); i++) {
                
                //  스킬사전에 있는 스킬인가?
                if(skill.contains(String.valueOf(str.charAt(i)))) {
                    // 순서가 다른가?
                    if(skill.charAt(pt)!=str.charAt(i)) {
                        flag = true;
                        break;
                    } else {
                        pt++;
                    }
                }
            }
            
            if(!flag)
                answer++;
        }
        
        return answer;
    }
}

 

다른 사람의 풀이도 보았는데, 개인적으로 대단하다고 생각이 들었던 코드.

어떻게 indexOf 를 생각하고, 정규식 표현을 skill을제외한 문자열을 공백으로 바꿔버리는 로직을 생각할 수 있을까 대단하다!!!

import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        ArrayList<String> skillTrees = new ArrayList<String>(Arrays.asList(skill_trees));
        //ArrayList<String> skillTrees = new ArrayList<String>();
        Iterator<String> it = skillTrees.iterator();

        while (it.hasNext()) {
            if (skill.indexOf(it.next().replaceAll("[^" + skill + "]", "")) != 0) {
                it.remove();
            }
        }
        answer = skillTrees.size();
        return answer;
    }
}
728x90

+ Recent posts