250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[Algorithm] 스킬트리 ( Programmers / JavaScript ) 본문

[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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형
Comments