코딩테스트 연습

프로그래머스 코딩테스트 연습 - 추억 점수 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를 사용하는데는 좀 더 신중하게 접근하거나, 애초에 데이터를 숫자의 배열로 만드는 것이 어땠을까 싶었다.