프로그래머스 : 스킬트리
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 |