알고리즘 문제풀이/프로그래머스

스킬트리 / js 풀이

Heman 2021. 8. 31. 01:22

프로그래머스 : 스킬트리

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

문제풀이

이번 문제는 크게 어려워 보이지는 않았지만, 막상 풀려고 보았을 때 까다로운 문제였습니다.

 

코드

function solution(skill, skill_trees) {
    let answer = 0;
    
    skill_trees.forEach(elem => available(skill, elem) === true && answer ++);
    // skill_trees를 만들어둔 available 함수로 확인하며 개수를 체크
    
    return answer;
}

function available(skill, tree) { 
    let hashMap = {}, k = 0;
    // 해시맵 방식을 활용하기 위해 객체를 생성
    // k는 스킬의 순서를 체크하기 위한 변수
    
    for(let i=0; i<skill.length; i++)
        hashMap = {...hashMap, [skill[i]] : i};
    // skill의 요소를 순서대로 객체에 입력
    // ex) {C:0, B:1, D:2} 이런 형식으로 저장이 됨
    // ...hashMap을 이용하여 기존의 요소들을 유지한 채, 새로운 값을 객체에 넣을 수 있음
    
    for(let j=0; j<skill.length; j++){
        for(let i of tree){
        // 스킬트리의 요소를 체크
        
            if(hashMap[i] === k) //
                k++;
            // 스킬트리의 스킬이 현재 올바른 순서라면
            // k를 +1 해줌으로써 다음 순서를 저장함
            
            else if(hashMap[i] > k)
                return false
            // 현재 스킬의 순서가 k 보다 크다면 false
            
            else continue;
        }
    }
    
    // 올바른 순서로 스킬이 배치되어 있다면, for문을 모두 통과 후 true
    return true;
}

 

리뷰

이번 문제는 크게 어려워 보이지는 않았지만, 막상 풀려고 보았을 때 까다로운 문제였습니다. 객체를 활용하여 풀 생각을 하지 못하였다면, 단순 3중 for문을 사용하면서 많이 방황했을 법한 문제였던 것 같습니다 ㅎㅎ

ES6 문법의 위대함을 한번 더 느낄 수 있었던 문제였네요~

'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글

불량 사용자 / js 풀이  (0) 2023.07.30
[1차] 뉴스 클러스터링 / js 풀이  (0) 2021.08.31
괄호 변환 / js 풀이  (0) 2021.08.28
프린터 / js 풀이  (0) 2021.08.06
튜플 / js 풀이  (0) 2021.08.02