[프로그래머스] Lv2. 스킬트리

코드

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.solution("CBD", new String[]{"BACDE", "CBADF", "AECB", "BDA"}));
        System.out.println("================================");
    }
    
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        
        for (String skillTree : skill_trees) {
            System.out.println("skillTree = " + skillTree);
            int skillIndex = 0;
            boolean isPossible = true;
            for (int i = 0; i < skillTree.length(); i++) {
                int skillOrder = skill.indexOf(skillTree.charAt(i));
                //필수 스킬트리에 존재하는 스킬인지 확인
                // -1 이라면 필수 스킬트리에 존재하지 않는 스킬이기에 자유롭게 배울 수 있는 스킬
                if (skillOrder == -1) {
                    continue;
                }
                
                //하지만 필수 스킬트리에 존재하는 스킬이라면
                // 지금 진행중인 skillIndex 와 동일해야 정상적인 스킬트리를 진행중임을 알 수 있다.
                if (skillOrder == skillIndex) {
                    skillIndex++;
                } else {
                    //만약 스킬트리와 동일하지 않은 인덱스에 위치한다면 불가능한 스킬트리이다.
                    isPossible = false;
                    break;
                }
            }
            
            //만약 isPossible 이 true 라면 정상적인 스킬트리이다.
            if (isPossible) {
                answer++;
            }
        }
        
        return answer;
    }
}

링크

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

문제 설명

선행 스킬 순서가 주어지며, 사용자가 만든 스킬트리 배열이 주어지는 경우

가능한 스킬트리의 개수를 반환하는 문제

제한조건

스킬은 알파벳 대문자로만 이루어져 있습니다.
스킬 순서와 스킬트리는 문자열로 표기합니다.
선행 스킬 순서 skill의 길이는 1 이상 26 이하입니다.
skill_trees는 길이 1 이상 20 이하인 배열입니다.
skill_trees의 각 원소는 길이가 2 이상 26 이하인 문자열입니다.

변수설명

  • answer 변수
    • 가능한 스킬트리의 개수를 세기 위해 사용됩니다.
  • skill_trees 배열
    • 각 스킬트리에 대해 반복문을 실행하여 각 스킬트리가 선행 스킬 순서를 따르는지 확인합니다.
  • skill.indexOf(skillTree.charAt(i))
    • 현재 스킬이 선행 스킬 순서에 있는지, 그리고 올바른 순서인지 확인합니다.
    • 즉,
      • skill → 선행스킬
      • skillTree.charAt(i) → 해당 스킬배열의 문자 첫번째부터 쭉쭉
        • skillTree 의 필수 스킬트리의 순서는 선행스킬 skill 의 순서와 동일해야함
  • 모든 스킬이 올바른 순서로 배워졌다면, answer를 증가시켜 가능한 스킬트리의 개수를 업데이트합니다.
  • 최종적으로 answer를 반환하여 가능한 스킬트리의 총 개수를 제공합니다.

그냥 단순한 구현문제였던거같다.


Uploaded by N2T