스킬 트리

연쇄코딩마·2021년 2월 3일
0
post-thumbnail

설명 :

프로그래머스 스킬트리

간단 설명 :

게임을 많이 해보면 알겠지만 선행 스킬이란게 있다. 선행스킬은 어떤 스킬을 배우기 전에 선행되어야될 스킬이다. 예를 들어 썬더를 배우려면 라이트닝볼트를 배워야되고 그 전에 또 스파크를 배워야 된다.

선행스킬이 아니라면 그 순서에 상관없이 중간에 배울수 있다.

예 : 스파크=> 힐링 => 라이트닝 볼트 => 썬더

함수 인자
skill : 스킬 순서로 된 배열
skill_trees : 유저들이 만든 스킬트리를 담은 배열

리턴 값 : skill_trees중에서 가능한 트리 갯수를 리턴하는 함수

입출력 예

skillskill_treesreturn
"CBD"["BACDE", "CBADF", "AECB", "BDA"]2

입출력 예 설명

  • BACDE: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
  • CBADF: 가능한 스킬트리입니다.
  • AECB: 가능한 스킬트리입니다.
  • BDA: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다.
function solution(skill, skill_trees) {
  let result = 0;
  let filteredTrees = skill_trees.map((ele) =>
    ele.split('').filter((char) => skill.includes(char))
  );//=> 처음 스킬트리에 skill 인자에 해당하지 않는 부분들을 필터링함
  for (let i = 0; i < filteredTrees.length; i++) {//=> 그리고 skill 인덱스에 맞춘다
    let isValid = true;
    for (let j = 0; j < filteredTrees[i].length; j++) {
      if (skill[j] !== filteredTrees[i][j]) {//맞지 않으면 false를 해버리고 break로 그 반복문을 부셔버림
        isValid = false;
        break;
      }
    }
    if (isValid) { //반복문을 돌면서 ture인것들이 있으면 카운팅함
      result++;
    }
  }
  return result;
}

공부를 너무 안하니 반성을 해야겠다.

profile
只要功夫深,铁杵磨成针

0개의 댓글