[JavaScript][Programmers] 스킬 트리

조준형·2021년 8월 29일
0

Algorithm

목록 보기
92/142
post-thumbnail

🔎 스킬 트리

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/49993

📄 제출 코드

function solution(skill, skill_trees) {
  let answer = skill_trees.length;
  // let trees = [];
  // for (let i = 0; i < answer; i++) {
  //   trees.push([]);
  // }
  // for (let i = 0; i < skill_trees.length; i++) {
  //   let tmp = skill_trees[i].split('');
  //   for (let j = 0; j < tmp.length; j++) {
  //     if (skill.includes(tmp[j])) { trees[i].push(tmp[j]); }
  //   }
  // }
  // console.log(trees);
  
  let trees = skill_trees
    .map((el) => {
      return el.split('').filter((s) => skill.includes(s));
    })
  
  for (let i = 0; i < trees.length; i++) {
    for (let j = 0; j < trees[i].length; j++) {
      if (skill[j] != trees[i][j]) {
        answer--;
        break;
      }
    }
  }
  return answer;
}
const skill = "CBD" ;
const skill_trees = ["BACDE", "CBADF", "AECB", "BDA"]
console.log(solution(skill, skill_trees));

처음에 정규표현식을 사용해서 해결하려고 했는데 순서대로 어떻게 알지하고 고민하다가 다른 방법을 생각해보았다.
skill의 순서만 맞으면 그 문자 앞뒤로는 뭐가 와도 괜찮겠다라고 생각이 들었다.
그래서 skill_trees에 들은 문자열에서 skill의 문자열만 순서대로 trees에 담았다.

const skill = "CBD" ;
const skill_trees = ["BACDE", "CBADF", "AECB", "BDA"]

trees 모습
[ [ 'B', 'C', 'D' ], [ 'C', 'B', 'D' ], [ 'C', 'B' ], [ 'B', 'D' ] ]

이제 skill의 CBD와 비교하면서 순서대로 했을 때 skill과 tree가 다르면 answer에서 1개씩 -1시켜서 정답을 도출시킨다.

정답 후 다른 사람들의 코드를 보면서 trees를 만들 때 코드를 고쳤다.
처음 trees를 만들 때 반복문을 사용해 만들었는데 map과 filter를 이용해 고쳐보았다.

// 처음 trees
let trees = [];
for (let i = 0; i < answer; i++) {
  trees.push([]);
}
for (let i = 0; i < skill_trees.length; i++) {
  let tmp = skill_trees[i].split('');
  for (let j = 0; j < tmp.length; j++) {
    if (skill.includes(tmp[j])) { trees[i].push(tmp[j]); }
  }
}
console.log(trees);
// 수정 후
let trees = skill_trees
    .map((el) => {
      return el.split('').filter((s) => skill.includes(s));
    })

🎲 다른 코드

function solution(skill, skill_trees) {
    var answer = 0;
    var regex = new RegExp(`[^${skill}]`, 'g');

    return skill_trees
        .map((x) => x.replace(regex, ''))
        .filter((x) => {
            return skill.indexOf(x) === 0 || x === "";
        })
        .length
}

처음에 정규표현식을 이용해 풀고 싶었다고 했엇는데 다른 사람코드 중에 정규표현식을 이용해 푼 코드가 있어 가져와봤다.

profile
깃허브 : github.com/JuneHyung

0개의 댓글