프로그래머스 - 스킬트리
2020-02-14
스킬트리
-
이해
- 선행스킬이란? 스킬을 배우기전 선행으로 배워야지 할수있는거 예) 걷기 -> 뛰기
- 걷기->잠자기-> 뛰기 (가능) / 잠자기 -> 걷기 (가능) / 뛰기 -> 걷기 (불가능)
- 스킬은 한번만 배울수 있고 중복이 되지 않는다.
- 주어진 배열중에 해당되는것만 리턴한다.
-
계획
- skilltrees를 sort()를 이용하여 사전순으로 정렬을 한다.
- 방법1. 하나씩 꺼내서 스킬을 제외하고 오로지 선행스킬만 뽑아낸다.
- 방법2. skill을 하나씩 인덱스 찾아서 비교
- 쉽게 생각하자
- 테스트코드 작게 잘라보자
-
실행
const getSkillTr = (skill, skill_trees) => { let skillArr = skill.split(''); let str, count = 0; for(let i = 0; i < skill_trees.length ; i++) { str = skill_trees[i].split('').filter(char => skillArr.includes(char)).join(''); if(str === skill.substring(0,str.length)) { count++; } } return count; } test('스킬트리', () => { expect(getSkillTr("CBD",["BACDE", "CBADF", "AECB", "BDA"])).toEqual(2); });
-
반성
- filter 함수는 true일때 그 값 나오고 false이면 filter를 해준다.
- Array, String의 내부함수를 햇갈리지 말자(유사배열과 배열의 차이점)
- Array.prototype.includes(' ') return true false