[코테] 음양더하기

JulyK9·2022년 12월 27일
0

문제

어떤 정수들이 있는데, 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어짐.
실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성.

제출코드

function solution(absolutes, signs) {
    let combined = []
  
    for(let i = 0; i < absolutes.length; i++) {
      signs[i] ? combined[i] = absolutes[i] : combined[i] = -absolutes[i]
    }
    return combined.reduce((acc, cur) => acc + cur)
}

접근과정

  • signs 배열 해당 인덱스의 true / false 여부에 따라 absoutes 배열 해당 인덱스의 요소에 부호를 적용하여 새로운 배열에 넣어줌
  • reduce 메서드를 이용하여 배열 요소의 합을 구해줌

다른풀이 1.

function solution(absolutes, signs) {

    return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
  • reduce를 잘 활용함
  • 누적합을 구하되 현재 요소 인자 부분에 signs 배열 해당 인덱스의 true / false 에 따라 1 또는 -1로 분기하여 곱해서 현재값을 처리할 수 있도록 해주는 센스

다른풀이 2.

function solution(absolutes, signs) {
    let answer = 0;
    absolutes.forEach((v, i) => {
        if (signs[i]) {
            answer += v;
        } else {
            answer -= v;
        }
    })
    return answer;
}
  • forEach 메서드로 배열의 요소를 순회하면서
  • true /false 여부에 따라 누적되는 값을 바로 더해주거나 빼주도록 처리

회고

  • 부호가 다른 값들을 더하는 행위는 결국 요소의 부호에 따라 더하거나 빼는 행위가 됨
  • 요소에 부호를 부여하는 방법은 앞에 -, +를 붙여주거나 1, -1을 곱해줄 수도 있음
profile
느리지만 꾸준하게. 부족하거나 잘못된 부분은 알려주시면 감사하겠습니다.

0개의 댓글