코딩테스트 연습
프로그래머스 코딩테스트 연습 - 추억 점수 JavaScript
citron031
2023. 5. 1. 10:01
이번에 푼 연습문제는 전에 풀었던 것 같은 유형의 문제로, 배열의 데이터를 가공하여 다른 주어진 데이터와 연관짓는 문제였다.
이번에 문제를 풀 때는 최대한 고차함수를 이용해보기로 하였다.
function solution(name, yearning, photo) {
const answer = [];
const scoreObj = {};
for(let i = 0; i < name.length; i++) {
scoreObj[name[i]] = yearning[i];
}
return photo.map(arr =>
arr.length === 1 ?
(scoreObj[arr[0]] || 0) :
arr.reduce((acc, cur) => {
let accTmp = acc;
let curTmp = scoreObj[cur] || 0
if(typeof acc !== 'number') {
accTmp = scoreObj[acc] || 0;
}
return accTmp + curTmp;
}), 0);
}
고차함수로 map과 reduce를 사용했는데, 오히려 코드가 더 복잡하고 읽기 어려워진 것 같다.
reduce로 배열의 값들을 더하기 위한 시도를 했는데, 예외처리도 필요했고 기본적으로 문자열로 주어진 데이터를 객체의 키값으로 사용하여 value를 꺼내야 했기에 코드가 길어졌다.
reduce를 사용하는데는 좀 더 신중하게 접근하거나, 애초에 데이터를 숫자의 배열로 만드는 것이 어땠을까 싶었다.