[프로그래머스] 스킬트리 (JS)

hhkim·2023년 9월 26일
0

Algorithm - JavaScript

목록 보기
142/188
post-thumbnail

첫 번째 풀이 과정

  1. 스킬 이름을 키로, 인덱스와 배웠는지 여부를 값으로 갖는 객체 생성: A: [0, false]
  2. 스킬트리 배열에 대해 반복
  3. 각 스킬에 대해 반복
  4. 현재 스킬이 1번 객체에 존재하지 않으면 유효한 스킬이므로 다음 스킬로 넘어가기
  5. 1번 객체에서 현재 스킬 -1번째 스킬을 배웠는지 확인
    배웠으면 현재 스킬을 배웠다고 체크하고 다음 스킬로 넘어가기
    아니면 유효하지 않으므로 반복문을 빠져나가 다음 스킬트리로 넘어가기

첫 번째 코드

function solution(skill, skill_trees) {
  const obj = {};
  let result = 0;
  for (const s of skill_trees) {
    [...skill].forEach((s, i) => (obj[s] = [i, false]));
    let flag = true;
    for (let i = 0; i < s.length; ++i) {
      const c = s[i];
      if (!obj[c]) continue;
      const prev = skill[obj[c][0] - 1];
      if (obj[prev] && !obj[prev][1]) {
        flag = false;
        break;
      }
      obj[c][1] = true;
    }
    if (flag) ++result;
  }
  return result;
}

두 번째 풀이과정

  1. 스킬트리에 대해 반복
  2. 스킬에 존재하는 문자만 임시 배열에 담기
  3. 스킬이 임시 배열 문자열로 시작하면 유효하므로 결과 +1

두 번째 코드

function solution(skill, skill_trees) {
  const arr = [...skill];
  let result = 0;
  for (const s of skill_trees) {
    const tmp = [];
    for (const c of s) {
      if (arr.includes(c)) tmp.push(c);
    }
    if (skill.startsWith(tmp.join(''))) ++result;
  }
  return result;
}

🤔

첫 번째 풀이대로 풀고 나서 뭔가 복잡한 것 같아 사람들 힌트를 참고해서 한 번 더 풀어봤다. 좀더 간단하게 풀 수도 있는 건데 너무 1차원적으로 풀어서 오히려 코드가 더 복잡해졌던 것 같다.

0개의 댓글