[ 문제 설명 ]
[ 아이디어 ]
총합을 key, 해당 직군 배열을 value로 하는 scoreMap을 활용.
언어점수 table를 순회하면서 점수를 구하고 scoreMap에 넣는다.
편이성을 위해 가장 큰 점수 maxScore를 별도로 들고 있다가 마지막에 key로 조회하고 같은 점수일 경우를 위해 sort를 한다.
[ 코드 ]
function solution(table, languages, preference) {
var answer = "";
let preferenceMap = {};
let scoreMap = new Map();
let maxScore = 0;
languages.forEach((item, index) => {
return (preferenceMap[item] = preference[index]);
});
table.forEach((item) => {
let [career, ...languages] = item.split(" ");
let score = 0;
languages.forEach((language, index) => {
if (preferenceMap[language] === undefined) return;
score += preferenceMap[language] * (5 - index);
});
if (maxScore < score) maxScore = score;
if (scoreMap.has(score)) {
scoreMap.set(score, [career, ...scoreMap.get(score)]);
} else {
scoreMap.set(score, [career]);
}
});
answer = scoreMap.get(maxScore).sort()[0];
return answer;
}
[ 팁 ]
1. es6 문법인 비구조화할당을 위해 string에서 career와 langauges를 뽑아와 한번에 분리할 수 있게 되었다.
// 개선 전
let career = item.split(" ")[0]
let languages = item.split(" ").slice(1,6)
// 개선 후
let [career, ...languages] = item.split(" ")
2. 비구조화 할당을 이용해 배열을 간단히 합칠 수 있게 되었다.
if (scoreMap.has(score)) {
scoreMap.set(score, [career, ...scoreMap.get(score)]); // 비구조화 할당
} else {
scoreMap.set(score, [career]);
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 행렬의 곱셈 - 자바스크립트 (0) | 2021.08.30 |
---|---|
[프로그래머스] 2018 KAKAO > 뉴스 클러스터링 - 자바스크립트 (0) | 2021.08.30 |
[프로그래머스] 위클리 챌린지 > 2주차 - 자바스크립트 (0) | 2021.08.17 |
[프로그래머스] 위클리 챌린지 > 1주차 - 자바스크립트 (0) | 2021.08.17 |
[프로그래머스] 연습문제 > 숫자의 표현 - 자바스크립트 (0) | 2021.06.14 |
댓글