import java.util.*;
public class Solution {
public static void main(String[] args) {
System.out.println(solution("CBD", new String[]{"BACDE", "CBADF", "AECB", "BDA"})); // Output: 2
}
public static int solution(String skill, String[] skill_trees) {
return (int) Arrays.stream(skill_trees)
.filter(tree -> isValidSkillTree(skill, tree))
.count();
}
private static boolean isValidSkillTree(String skill, String tree) {
int skillIndex = 0;
for (char c : tree.toCharArray()) {
int idx = skill.indexOf(c);
if (idx != -1) { // c is in skill
if (idx != skillIndex) return false;
skillIndex++;
}
}
return true;
}
}
스트림 설명
Arrays.stream(skill_trees)
- Arrays.stream(skill_trees)는 skill_trees 배열을 스트림으로 변환.
- skill_trees 배열의 각 요소(스킬트리 문자열)가 스트림의 항목으로 변환.
.filter(tree -> isValidSkillTree(skill, tree))
- filter 메소드는 스트림의 각 요소에 대해 주어진 조건을 검사.
- 이 경우 조건은 람다 표현식 " tree -> isValidSkillTree(skill, tree) " 이다 .
- tree는 스트림의 각 요소, 즉 skill_trees의 문자열.
- isValidSkillTree(skill, tree) 메소드는 skill과 tree를 입력으로 받아 스킬트리가 유효한지 검사.
- 이 메소드가 true를 반환하면, tree는 필터링된 결과에 포함. false를 반환하면, tree는 필터링된 결과에서 제외.
.count();
- count() 메소드는 필터링된 스트림의 요소 개수를 계산
- isValidSkillTree(skill, tree)가 true를 반환한 스킬트리의 개수를 세어서 반환