728x90
반응형
문제설명
문제분석 - 수도코드
이 문제는 skill_trees를 순회하며 skill의 조건에 부합하는 요소를 필터링한 길이를 찾는 문제입니다. 따라서 solution 함수는 다음과 같이 간단하게 작성할 수 있습니다.
function solution(skill, skill_trees) {
return skill_trees.filter(x => isPossible(skill, x)).length;
}
이제 isPossible 함수를 통해 skill_trees의 요소와 skill을 비교해 가능한 스킬트리인지 아닌지 리턴하면 됩니다.
이해하기 쉽게 코드작성하기
function solution(skill, skill_trees) {
return skill_trees.filter(x => isPossible(skill, x)).length;
}
function isPossible(a, b) {
let isUsed = new Array(a.length).fill(false);
for(let i = 0; i < b.length; i++) {
const idx = a.indexOf(b[i]);
const falseIdx = isUsed.indexOf(false);
if(a[idx] === b[i] && idx !== falseIdx) return false;
isUsed[idx] = true;
}
return true;
}
위 코드에서 isUsed 배열을 생성하고, skill_trees의 요소(b)를 순회하며 a에 포함되었는지 여부를 확인합니다. 만약 찾는 문자가 a에 포함되지 않는다면 idx가 항상 -1을 리턴하므로 isUsed[idx] 는 undefined 여서 아무런 동작도 하지 않으므로 무시됩니다. b[i]가 a[idx]와 같은데, idx와 falseIdx(스킬트리에서 적용될 차례인 스킬)이 다른 경우에는 불가능한 경우로 판단합니다. 이 반복문을 통과하면 항상 가능한 경우이므로 true를 리턴하면 필터함수의 완성입니다.
728x90
반응형
'Practice for coding test' 카테고리의 다른 글
프로그래머스 - Level 2. k진수에서 소수 개수 구하기 / JavaScript (js) (0) | 2023.03.03 |
---|---|
프로그래머스 - Level 2. [1차] 뉴스 클러스터링 / JavaScript (js) (0) | 2023.03.02 |
프로그래머스 - Level 2. [1차] 캐시 / JavaScript (js) (0) | 2023.02.28 |
프로그래머스 - Level 2. 할인 행사 / JavaScript (js) (0) | 2023.02.27 |
프로그래머스 - Level 2. 튜플 / JavaScript (js) (0) | 2023.02.26 |