몽땅뚝딱 개발자

[프로그래머스 | Javascript] Lv.1 추억 점수 본문

Development/알고리즘

[프로그래머스 | Javascript] Lv.1 추억 점수

레오나르도 다빈츠 2023. 10. 9. 14:10

 

 

 

내 힘으로 푼 첫 문제..🥺

 

 


 

 

 

🗝 내가 푼 코드

function solution(name, yearning, photo) {    
    const point = {}
    name.forEach((obj, index) => {
        point[obj] = yearning[index]
    })
    
    return photo.map((list) => {
        return list.reduce((acc, cur) => acc + (point[cur] || 0), 0)
    })
}

 

 

 

point object을 만드는 부분을 변수 선언 없이 할 수는 없을까 고민하다 map 함수를 활용하면 될 것 같아서 찾아봤더니 reduce를 사용하는 방법이 있었다!

reduce는 지금까지 전체적으로 계산하는 연산이 필요할 때만 사용했었는데 진짜 신세계..🥸

 

// 처음 버전
const point = {}
name.forEach((obj, index) => {
    point[obj] = yearning[index]
})

// 이렇게 만들 수 있다.
const point = name.reduce((newObj, obj, index) => {
    newObj[obj] = yearning[index]
    return newObj
}, {})

// map도 가능!
const point = name.reduce((map, obj, index) => {
    map.set(obj, yearning[index])
    return map
}, new Map)

 

 

그리고 마지막 코드를 줄여보자!

// 처음 버전. 나는 이게 읽기 쉽다고 생각한다.
return photo.map((list) => {
    return list.reduce((acc, cur) => {
        return acc + (point[cur] || 0)
    }, 0)
})

// 줄여야 한다면 이 정도까지만 한 줄로 줄이는게 낫다고 생각한다.
return photo.map((list) => {
    return list.reduce((acc, cur) => acc + (point[cur] || 0), 0)
})

// 이렇게도 표현할 수 있지만 읽기 힘든 것 같아서 이렇게까지는 생략 안 한다. (tmi)
return photo.map(list => list.reduce((acc, cur) => acc + (point[cur] || 0), 0))

 

 

Comments