https://programmers.co.kr/learn/courses/30/lessons/76501
한 2분이면 풀겠다 했는데 20분이 걸렸다.
아직 reduce에 대해서 완변하게 이해 못한 것 같다.
그리고 reduce 에서 index를 적극 활용하자
나의 코드
function solution(absolutes, signs) {
const result = absolutes.reduce((pre, cur, i) => {
if(signs[i]){
pre.push(cur);
}else{
pre.push(-1 * cur)
}
return pre
}, [])
return result.reduce((pre,cur) => pre + cur,0);
}
reduce 한 번만 쓰고 끝낼려고 했는데 두 번을 써버렸다.
처음 중간에 for문을 추가해줫는데
reduce에는 for문이 소용이 없다.
왜냐하면
콜백함수이기때문에 for문이 전부 시행된 뒤에 다시 함수가 진행되어서 또 한 번 for문이 반복이 된다.
예제를 보면
function solution(absolutes, signs) {
const result = absolutes.reduce((pre, cur, i) => {
console.log("=======================")
console.log(
pre,
cur,
)
for(i=0; i < signs.length; i++){
if(signs[i]){
pre.push(cur)
}else{
pre.push(-cur)
}
}
return pre
}, [])
return result.reduce((pre,cur) => pre + cur,0);
}
console.log(solution([4,7,12],[true,false,true]))
//=======================
//[] 4
//=======================
//[ 4, -4, 4 ] 7
//=======================
//[ 4, -4, 4, 7, -7, 7 ] 12
//23
console.log() 된것을 보면
pre 가 [] 이고 cur 4 일때 for문이 전체 한 바퀴 돌고
pre 가 [4, -4, 4 ] 이고 cur 7 일때 또 for문이 전체 한 바퀴 돌고
이런식으로 for문을 한 번만 예상했지만 인자 하나마다 for문 전체가 돌기에 이 점은 꼭 생각해야한다.
다른사람 코드
function solution(absolutes, signs) {
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
이런식으로 더 간단하게 가능하다
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스-JS] level.1 소수 만들기 <소수> (0) | 2022.06.28 |
---|---|
[프로그래머스-JS] level.1 내적 (0) | 2022.06.27 |
[프로그래머스-JS] level.1 크레인 인형뽑기 (0) | 2022.06.26 |
[프로그래머스-JS] level.1 키패드 누르기 (0) | 2022.06.26 |
[프로그래머스-JS] level.1 숫자 문자열과 영단어 (0) | 2022.06.14 |