한 걸음씩

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

Programmers

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

winter17 2023. 7. 10. 10:17

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(name, yearning, photo) {
    var answer = [];
    let obj = {}
    for (let i = 0; i < name.length; i++){
        obj[name[i]] = yearning[i]
    }
    // console.log(obj)
    for (let i = 0; i < photo.length; i++){
        for (let j = 0; j < photo[i].length; j++){
            if (name.includes(photo[i][j])){
                photo[i].splice(j, 1, obj[photo[i][j]])
            }
        }
    }
    // console.log(photo)
    let numArr;
    let newArr = []
    for (let i = 0; i < photo.length; i++){
       // console.log(photo[i]) 
        numArr = photo[i].filter(item => !isNaN(Number(item)))
        // console.log(numArr)
        const sum = numArr.reduce((acc, cur) => acc + cur, 0)
        // console.log(sum)
        newArr.push(sum)
    }
    // console.log(newArr)
    return newArr;
}

 

입력 예시값이 다음과 같다고 가정해 볼 때

name = ["may", "kein", "kain", "radi"]
yearning = [5, 10, 1, 3]
photo = [["may", "kein", "kain", "radi"], ["may", "kein", "brin", "deny"], ["kon", "kain", "may", "coni"]]

 

name과 yearning 배열을 각 인덱스에 맞게 객체로 만들어주면 다음과 같아진다.

console.log(obj)
>> { may: 5, kein: 10, kain: 1, radi: 3 }

 

photo배열은 이차원 배열인데, obj에 있는 key값과 일치하는 경우 key에 맞는 value로 바꿔준다.

이때, 일치하지 않는 값들은 그대로 둔다

console.log(photo)
[ [ 5, 10, 1, 3 ], [ 5, 10, 'brin', 'deny' ], [ 'kon', 1, 5, 'coni' ] ]

 

반복문을 돌려 각 배열의 요소(배열:photo [i])을 보면 문자열이 있는데

문자열을 걸러주기 위해서 filter메서드를 사용한다. → numArr

문제에서 요구한 것은 각 배열 요소의 합이기 때문에 reduce 메서드로 각 배열을 더한 후

console.log(photo[i]) 
[ 5, 10, 1, 3 ]
[ 5, 10, 'brin', 'deny' ]
[ 'kon', 1, 5, 'coni' ]


console.log(numArr)
console.log(sum)
[ 5, 10, 1, 3 ]
19
[ 5, 10 ]
15
[ 1, 5 ]
6

 

newArr배열에 push 하여 반환한다 

console.log(newArr)
[ 19, 15, 6 ]

리뷰

다 풀고 나서 보니까 굳이 객체로 만들지 않고 바로 photo배열을 반복문 돌려서 점수를 확인하고 넘어가는 방법도 괜찮을 것 같다.