본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 스킬트리

by 현장 2026. 4. 1.

-Code

import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {
        // 스킬과 index를 저장
        Map<Character, Integer> skillInfo = new HashMap<>();
        for (int i = 0; i < skill.length(); i++) {
            skillInfo.put(skill.charAt(i), i);
        }
        // 가능한 스킬 트리 확인        
        int answer = 0;
        for (String skill_tree : skill_trees) {
            if (isOk(skillInfo, skill_tree)) {
                System.out.println(skill_tree);
                answer++;
            }
        }
        return answer;
    }

    private static boolean isOk(Map<Character, Integer> skillInfo, String skillTree) {
        // 스킬 트리가 가능한지 확인
        int idx = 0;
        for (char sk : skillTree.toCharArray()) {
            // 해당 스킬이 트리에 포함되는지 확인
            if (skillInfo.containsKey(sk)) {
                // 트리에 포함되나 다른 순서로 배우게 되면 false
                if (skillInfo.get(sk) != idx) {
                    return false;
                }
                idx++;
            }
        }
        return true;
    }
}

처음에 idx를 이용해 설계는 맞았으나 스킬 트리를 반복적으로 배우는 조건이 있는 줄 알고 나머지 설계를 해서 틀렸습니다. 그래서 내가 잘못 이해한 건지 확인해 보니 가능한 스킬트리 1번만 존재하는 것임을 알고 나머지 연산을 지우니 해결됐습니다.