Jun 개발노트

프로그래머스 - 스킬트리

2020-02-14

스킬트리


  1. 이해

    • 선행스킬이란? 스킬을 배우기전 선행으로 배워야지 할수있는거 예) 걷기 -> 뛰기
    • 걷기->잠자기-> 뛰기 (가능) / 잠자기 -> 걷기 (가능) / 뛰기 -> 걷기 (불가능)
    • 스킬은 한번만 배울수 있고 중복이 되지 않는다.
    • 주어진 배열중에 해당되는것만 리턴한다.
  2. 계획

    • skilltrees를 sort()를 이용하여 사전순으로 정렬을 한다.
    • 방법1. 하나씩 꺼내서 스킬을 제외하고 오로지 선행스킬만 뽑아낸다.
    • 방법2. skill을 하나씩 인덱스 찾아서 비교
    • 쉽게 생각하자
    • 테스트코드 작게 잘라보자
  3. 실행

    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);
    }); 
    
    
  4. 반성

    • filter 함수는 true일때 그 값 나오고 false이면 filter를 해준다.
    • Array, String의 내부함수를 햇갈리지 말자(유사배열과 배열의 차이점)
    • Array.prototype.includes(' ') return true false