1. 문제 풀이 아이디어
- 스킬트리의 문자들을 스킬에서 찾아 알맞은 순서인지 확인하면 문제를 해결할 수 있다.
2. 나의 정답 코드
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = skill_trees.length;
for (int i = 0; i < skill_trees.length; i++) {
int cur = 0;
for (char c : skill_trees[i].toCharArray()) {
int index = skill.indexOf(c);
if (index == -1)
continue;
if (index != cur) {
answer--;
break;
}
cur++;
}
}
return answer;
}
}
3. 정리
- 모든 스킬트리가 유효하다고 가정하고,
answer
를skill_trees
의 크기로 초기화한다.
- 각 스킬트리를 순회할 때 현재 스킬 순서를 나타내는 변수
cur
를0
으로 초기화한다.
skill_trees[i]
의 각 문자를 하나씩 가져와skill
에서 해당 문자의 위치를index
에 저장한다.
index
가1
이면, 해당 문자가skill
에 포함되지 않은 것이므로 다음 문자로 넘어간다.
index
가cur
와 다르면 올바른 순서가 아니므로answer
를 감소시키고 반복을 종료한다.
index
가cur
와 같으면 올바른 순서이므로cur
를 증가시킨다.
4. 더 좋은 코드 리뷰
class Solution {
public static int solution(String skill, String[] skill_trees) {
String regex = "[^" + skill + "]";
return (int) Arrays.stream(skill_trees)
.filter(tree -> skill.startsWith(tree.replaceAll(regex, ""))).count();
}
}
- 스킬 문자열(
skill
)에 포함되지 않은 문자들을 제외하기 위해 정규 표현식을 생성하고, 이를regex
에 저장한다.
skill_trees
배열에서stream
을 사용하여 각 스킬트리를 순회하며,replaceAll
메서드로regex
에 해당하는 문자를 제거하여skill
에 포함된 문자만 남긴다.
- 남은 문자열이
skill
의 시작 문자열(skill.startsWith(...)
)과 일치하는 경우만 필터링하여, 조건에 맞는 스킬트리의 개수를 카운트하고 결과로 반환한다.
Share article