본문 바로가기

프로그래머스

[프로그래머스] 추억 점수

https://school.programmers.co.kr/learn/courses/30/lessons/176963

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


1차 제출

function solution(name, yearning, photo) {
    var answer = [];
    let map = new Map();
    for(var i = 0 ; i < name.length ; i ++ ){
        map.set(name[i],yearning[i])
    }
    
    for(var i = 0 ; i < photo.length ; i ++){
        let sum = 0;
        for(var j = 0 ; j < photo[i].length ; j ++){
            sum += map.get(photo[i][j]) || 0;
        }
        answer.push(sum);
    }
    return answer;
}

결과 : 100점


 

문제 자체는 쉬워서 푸는 데에 어려움은 없었다.
제출 이후 다른 분들의 코드를 살펴보다가 한 줄로 문제를 해결하신 분들이 있어서 코드를 가져와보았다.

간단하고 깔끔한 코드라고 생각된다.

function solution(name, yearning, photo) {
    return photo.map((v)=> v.reduce((a, c)=> a += yearning[name.indexOf(c)] ?? 0, 0))
}

 

# Map 문법
const newArray = array.map((element, index, array) => { });

- element: 배열의 현재 요소.
- index (선택적): 현재 요소의 인덱스.
- array (선택적): map이 호출된 원본 배열.


# Reduce 문법
array.reduce((accumulator, currentValue, index, array) => {
    // 반환값은 다음 반복의 accumulator가 됨
}, initialValue);

- accumulator: 이전 콜백의 반환값. 초기값으로 시작.
- currentValue: 현재 순회 중인 배열의 요소.
- index (선택적): 현재 요소의 인덱스.
- array (선택적): reduce가 호출된 원본 배열.
- initialValue (선택적): accumulator의 초기값. 생략하면 배열의 첫 번째 요소가 초기값이 됩니다.