본문 바로가기
코테연습

175. 스킬트리 Javascript

by hxunz 2023. 1. 9.

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
    선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 구하라
  • 주어진 자료는 무엇인가?
    skill : 선행 스킬 순서
    skill_trees : 유저들이 만든 스킬트리를 담은 배열 

  • 조건은 무엇인가?
    킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
    스킬 순서와 스킬트리는 문자열로 표기합니다.
    예를 들어, C → B → D 라면 "CBD"로 표기합니다
    선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
    skill_trees는 길이 1 이상 20 이하인 배열입니다.
    skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.

2. 계획

  •  주어진 skill을 쪼갠다.
  • skill_trees를 순회하면서 skill이 포함되어있다면 그걸 str에 넣는다. 
  • skill을 0부터 str의 길이만큼 자른다. 
  • 이것과 str을 비교하여 같다면 count + 1을 해준다.
  • 이를 리턴한다. 

3. 실행

const solution = (skill, skill_trees) => {
  let skills = skill.split('');
  let str = 0;
  let count = 0;

  for (let i = 0; i < skill_trees.length; i++) {
    str = skill_trees[i].split('').filter((it) => skills.includes(it)).join('');
    if (str === skill.slice(0, str.length)) {
      count += 1;
    }
  }
  return count
}


test('solution', () => {
  expect(solution("CBD", ["BACDE", "CBADF", "AECB", "BDA"])).toEqual(2);
});

 

'코테연습' 카테고리의 다른 글

176. 가장 가까운 같은 글자 Javascript  (0) 2023.01.19
176. 과일장수 Javascript  (0) 2023.01.18
174. 2xn 타일링  (1) 2023.01.09
173. 연속 부분 수열 합의 개수 Javascript  (0) 2023.01.06
172. 할인행사 Javascript  (0) 2023.01.05

댓글