[level 2] 스킬트리 - 49993
문제 설명
선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 -> 라이트닝 볼트 -> 썬더일 때, 썬더를 배우려면 라이트닝 볼트를, 라이트닝 볼트를 배우려면 스파크를 먼저 배워야 합니다. 순서에 없는 다른 스킬은 순서에 상관없이 배울 수 있습니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 주어질 때, 가능한 스킬트리 개수를 return 하는 함수를 완성해주세요.
제한 조건
- 스킬은 알파벳 대문자로 표기하며, 중복되지 않습니다.
- skill의 길이는 1 이상 26 이하입니다.
- skill_trees는 길이 1 이상 20 이하인 배열입니다.
- skill_trees의 원소는 길이가 2 이상 26 이하인 문자열입니다.
입출력 예
| skill | skill_trees | return |
|---|---|---|
| "CBD" | ["BACDE", "CBADF", "AECB", "BDA"] | 2 |
입출력 예 설명
- BACDE: B를 배우기 전에 C를 배워야 하므로 불가능합니다.
- CBADF: C -> B 순서가 지켜졌으므로 가능합니다.
- AECB: C -> B 순서가 지켜졌으므로 가능합니다. (D는 배우지 않아도 무관)
- BDA: B를 배우기 전에 C를 배워야 하므로 불가능합니다.
구현 코드
import java.util.HashMap;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
HashMap<Character, Integer> hashMap = new HashMap<>();
for(int i = 0; i < skill.length(); i++)
hashMap.put(skill.charAt(i), hashMap.size() + 1);
for(String temp : skill_trees){
int count = 0;
boolean isOk = false;
for(int i = 0; i < temp.length(); i++){
if(hashMap.containsKey(temp.charAt(i))) {
if(count + 1 != hashMap.get(temp.charAt(i))) {
isOk = true;
break;
}
count++;
}
}
if(!isOk)
answer++;
}
return answer;
}
}
성능 요약
메모리: 72.5 MB, 시간: 0.17 ms
채점결과
정확성: 100.0
합계: 100.0 / 100.0