본문 바로가기
Algorithm

[알고리즘] 프로그래머스 - 스킬트리

by byeongoo 2021. 3. 31.

1. 문제

 

2. 나의 풀이

배울 스킬트리(skill_trees)와 선행 스킬 문자열(skill)이 주어졌을 때 해당 스킬 트리를 몇 개를 배울 수 있는지 반환하는 문제다. 코드를 보면 크게 어렵지 않다는 것을 알 수 있다.

class Solution {

    private boolean[] visit;

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

        for(int i=0;i<skill_trees.length;i++){
            visit = new boolean[skill.length()];
            String curSkill = skill_trees[i];

            boolean success = true;
            for(int j=0;j<curSkill.length();j++){
                if(!isPossibleSkill(skill, curSkill.charAt(j))){ //스킬찍을 수 없으면 종료
                    success = false;
                    break;
                }
            }

            if(success){
                answer++;
            }

        }

        return answer;
    }

    private boolean isPossibleSkill(String skill, char curSkill){

        for(int i=0;i<skill.length();i++){
            if(skill.charAt(i) == curSkill){ //skill과 현재 찍을 curSkill이 같을 경우 이전 스킬을 찍었는지 검사
                for(int j=0;j<i;j++){
                    if(visit[j] == false){
                        return false;
                    }
                }
                visit[i] = true; //스킬을 찍었으므로 visit true
            }
        }

        return true;
    }

}