[Snow-ball]프로그래밍(컴퓨터)/Algorithm Training
[Algorithm] 스킬트리 ( Programmers / JavaScript )
Snow-ball
2024. 9. 20. 21:25
반응형
문제 설명
선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가 스파크 -> 라이트닝 볼트 > 썬더 일때, 썬더를 배우려면 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.
위 순서에 없는 다른 스킬 (힐딩 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 -> 힐링 -> 라이트닝 볼트 -> 썬더 와 같은 스킬트리는 가능하지만, 썬더 -> 스파크 나 라이트닝 볼트 -> 스파크 -> 힐링 -> 썬더 와 같은 스킬트리는 불가능합니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
코드 풀이
javascript 함수 버전:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function solution(skill, skill_trees) {
let count = 0;
skill_trees.forEach((skill_tree) => {
const newSkill = skill_tree
.split('')
.filter(c => skill.includes(c))
.join('');
if (skill.startsWith(newSkill)) count++
});
return count;
}
|
cs |
javascript 미함수 버전:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
function solution(skill, skill_trees) {
let count = 0;
const treeList = [...skill_trees];
const returnArr = [];
treeList.forEach((tree) => {
const treeArr = tree.split("");
const arr = [];
treeArr.forEach((char) => {
let str = "";
for (let j = 0; j < skill.length; j++) {
if (char === skill[j]) {
str += char;
}
}
arr.push(str);
});
let str2 = "";
arr.forEach((char) => (str2 += char));
returnArr.push(str2);
});
for (let i = 0; i < returnArr.length; i++) {
let valid = true;
const newSkill = returnArr[i];
for (let j = 0; j < newSkill.length; j++) {
const a = newSkill[j];
const b = skill[j];
if (a !== b) {
valid = false;
break;
}
}
if (valid) count++;
}
return count;
}
|
cs |
https://school.programmers.co.kr/learn/courses/30/lessons/49993?language=javascript#fnref1
반응형