728x90
점수 :1092 (+1)
테스트케이스 최대 소요시간 : 1.57ms
문제 요약
//
제출답안
function solution(name, yearning, photo) {
var answer = [];
let miss = {};
name.forEach((n, index)=>{ miss[n] = yearning[index] });
photo.forEach((pho, index)=>{
let nowMissCount = 0;
pho.forEach((member,index2)=>{
nowMissCount += (miss[member]) ? miss[member] : 0 ;
})
answer[index] = nowMissCount;
})
return answer;
}
문제해설
function solution(name, yearning, photo) {
// name[i] == yearning[i]
// 사진에 등장하는 사람중 name에 포함된 사람의 점수만 합산하면 됨
var answer = [];
let miss = {}; // {이름: 그리움점수, ...}
name.forEach((n, index)=>{ miss[n] = yearning[index] });
photo.forEach((pho, index)=>{ // photo 배열을 순회
let nowMissCount = 0; // 해당 photo의 추억 점수
pho.forEach((member,index2)=>{
//그리움 점수가 있는 인물이라면 점수를 더하되, undefined라면 0을 더합니다.
nowMissCount += (miss[member]) ? miss[member] : 0 ;
})
answer[index] = nowMissCount;
})
return answer;
}
그렇지만 충격적이게도 이 문제의 베스트 답변은 한줄이었다.ㅎ
보기가 난해하게 생겼으므로 줄바꾸고 뜯어보기 시작
return photo.map((v)=>
v.reduce((a, c)=>
a += yearning[name.indexOf(c)] ?? 0, 0)
)
#map
map은 원본 배열을 변경하지 않으면서 각 요소를 순회하며 로직을 수행하고 수행한 리턴값을 새로운 배열에 담아 리턴한다. 배열.map((요소값, 인덱스, 배열)=>{ ...로직...}); 형태로 사용하는데
위 경우에는 인덱스와 원본 배열은 사용하지 않고 요소값(배열의 값)만 사용하신 모양. 리턴을 따로 객체화하지 않고 바로 리턴하기 위해 사용하셨나보다.
배열의 값을 받아서 이번에는 reduce를 씀.
#reduce
배열.reduce((이전 순회에서 넘겨받은 값, 배열에서 지금 확인하고 있는 값, 인덱스, 배열원본) => 실행할 로직, 초기값)
으로 사용한다.
따라서
[3, 5, 7, 9].reduce((beforeX, currentV, index, arrayA)=> beforeX + currentV , 0) 는
배열 [3, 5, 7, 9]의 길이인 4만큼의 순회를 돌게 되고
beforeX ( 이전 순회에서 넘겨받은 값 ) | currentV ( 배열[index] ) | index ( 인덱스) | arrayA ( 배열원본 ) |
0 (= 초기값) | 3 | 0 | [3, 5, 7, 9] |
3 (=0+3) | 5 | 1 | [3, 5, 7, 9] |
8 (=3+5) | 7 | 2 | [3, 5, 7, 9] |
15 (=8+7) | 9 | 3 | [3, 5, 7, 9] |
24 (=15+9) |
를 거쳐 24가 리턴되는 방식.
따라서 reduce를 통해 photo[?] 인 배열의 값들을 순회하면서 그리움 점수를 합산해 map으로 리턴해주고, map은 그것들을 담아 리턴해준 셈!
다음 로직도 획기적.
변수 += x ?? 0 ;
x가 undefined나 null 이면 x 대신 0을 더해준다.
이야...
728x90
'코테' 카테고리의 다른 글
[JS] 숫자 문자열과 영단어 (0) | 2024.03.18 |
---|---|
[JS] 덧칠하기 - 프로그래머스 (0) | 2024.03.17 |
[JS] 가장 많이 받은 선물_충격적인 얕은 복사 (0) | 2024.03.12 |
[JS] 가장 가까운 같은 글자 (0) | 2024.03.10 |
[JS] 삼총사 (프로그래머스) (0) | 2024.03.08 |
댓글