조앤의 기술블로그

[프로그래머스] 스킬트리 (java) 본문

Programming/프로그래머스

[프로그래머스] 스킬트리 (java)

쬬앤 2020. 3. 23. 15:26

[문제]

 

 

[문제접근]

 

[코드]

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        
        boolean[] visit = new boolean[skill.length()];
        
        for(int i = 0; i < skill_trees.length; i++){
            String mySkill = skill_trees[i];
            int skillIndex = 0;
            boolean flag = true;
            for(int j = 0; j < mySkill.length(); j++){
                for(int k = 0; k < skill.length(); k++){
                    if(skill.charAt(k) == mySkill.charAt(j)){
                        if(k == skillIndex) 
                            skillIndex++;
                        else 
                            flag = false;
                    }
                }
            }
            if(flag == true)
                answer++;
        }
        
        return answer;
    }
}

3중 for문인게 좀 마음에 안든다.

 

[다른 풀이]

public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        int treeLength = skill_trees.length;

        for(int i=0; i<treeLength; i++){
            boolean flag = true;
            String[] skills = skill_trees[i].split("");
            int cnt=0;

            int skillsLen = skills.length;
            for(int j=0; j<skills.length; j++){
                if(cnt < skill.indexOf(skills[j])){
                    flag = false;
                    break;
                }else if(cnt == skill.indexOf(skills[j])){
                    cnt++;
                }
            }

            if(flag){
                answer++;
            }
        }
        return answer;
    }

 

[또다른 풀이]

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;
    }
}

 

[참고]

https://n1tjrgns.tistory.com/184

 

[프로그래머스] 스킬트리 (level 2)

프로그래머스 스킬트리 스킬트리 문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저..

n1tjrgns.tistory.com

[링크]