이번에 풀어본 문제는
프로그래머스 스킬트리 입니다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
Map<Character, Integer> map = new HashMap<>();
int skillSize = skill.length();
for (int i = 0; i < skillSize; i++) map.put(skill.charAt(i), i + 1);
for (String skillTree: skill_trees) {
int tmpCount = 1;
boolean flag = true;
for (char c: skillTree.toCharArray()) {
Integer skillIndexInfo = map.get(c);
if (skillIndexInfo != null) {
if (skillIndexInfo > tmpCount) {
flag = false;
break;
}
else tmpCount++;
}
}
if (flag) answer++;
}
return answer;
}
}
스킬트리 순서 문자열이 주어졌을 때, 서로 다른 스킬트리로 이루어진 배열 내에서 순서를 충족하는 스킬트리 문자열의 개수를 구하는 문제입니다.
정해진 순서를 앞서갔는지 까지만 판단하면 된다고 생각이 들어서, 처음 주어진 스킬트리 순서를 <스킬, 순서> 형태로 Map에 저장했습니다.
위 Map을 활용하여, count를 늘려가면서 현재 count보다 앞선 인덱스를 마주했을 때 실패로 간주하여 반복문을 벗어나도록 풀이 해보았습니다.