나의 풀이
문자열 다루기 문제이다.
생각의 과정
1. name 와 yearning로 객체를 만든뒤
2. 이중 배열로 되어있는 photo를 reduce를 통해 result 배열을 만들자.
// 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/176963?language=javascript
function solution(name, yearning, photo) {
// 생각
// name + yearning 객체로 만들어서 계속 활용
const longingBox = {};
// 1. 객체로 만들기
// 두개 동시에 해야하기에 forEach나 reduce보단 for문으로 한 번에 두개를 넣자
// 어차피 name과 yearing의 길이는 같으니까 물론 reduce로도 가능하다
for (let i = 0; i < name.length; i++) {
longingBox[name[i]] = yearning[i];
}
// reduce를 사용했을 때
/*
const longingBox = name.reduce((acc,cur,index) => {
acc[cur] = yearning[index]
return acc
},{})
*/
// 2. longingBox를 활용해서 photo의 이중배열을 계산 및 처리후 result 배열 만들기
// 내부 reduce는 배열안 배열의 각 그리움 점수의 합을 계산하여 return해준다.
// 외부 reduce는 단순히 그 그리움의 점수를 배열로 만들어 return해줄뿐이다.
return photo.reduce((photoAcc, photoCur) => {
const longingScore = photoCur.reduce((acc, cur, index, arr) => {
// 그리움 상자에 해당 인물이 있을 때
if (longingBox[cur]) acc += longingBox[cur];
return acc;
}, 0);
photoAcc.push(longingScore);
return photoAcc;
}, []);
}
다른 사람 풀이
function solution(name, yearning, photo) {
return photo.map((v)=> v.reduce((a, c)=> a += yearning[name.indexOf(c)] ?? 0, 0))
}
와 indexOf를 활용해서 풀었구나 싶었다.
이러면 객체를 굳이 만들어줄 필요가 없다. 그냥 바로 이중배열을 처리하면서 하면 된다.
그리고 photo의 length와 result의 length는 같을 수 밖에 없기 때문에 map을 사용해도 된다.
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스 - JS] level.1 같은 숫자는 싫어 (0) | 2023.05.17 |
---|---|
[프로그래머스] level.1 덧칠하기 (0) | 2023.05.16 |
[프로그래머스] level.1 크기가 작은 부분 문자열 (0) | 2023.04.25 |
[프로그래머스] level.2 전력망을 둘로 나누기 ★★ (0) | 2023.04.14 |
[프로그래머스] level.1 삼총사 (0) | 2023.04.13 |