한 걸음씩
[프로그래머스][JS] 추억 점수 본문
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배열을 반복문 돌려서 점수를 확인하고 넘어가는 방법도 괜찮을 것 같다.
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 시저 암호 (0) | 2023.07.11 |
---|---|
[프로그래머스][JS] 등수 매기기 (0) | 2023.07.10 |
[프로그래머스][JS] 치킨 쿠폰 ✅ (0) | 2023.07.09 |
[프로그래머스][JS] 구슬을 나누는 경우의 수 ✅ (0) | 2023.07.09 |
[프로그래머스][JS] 과일 장수 (0) | 2023.07.08 |