[Lv1]음양 더하기

Creating the dots·2021년 11월 8일
0

Algorithm

목록 보기
35/65

프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/76501

나의 풀이(1)

  • map과 reduce 메소드를 모두 사용
function solution(absolutes, signs){
  return absolutes.map((el,idx)=>{
    if(!signs[idx]) return (-1)*el;
    return el;
  }).reduce((acc,cur)=> {return acc+cur;},0);

나의 풀이(2)

  • reduce만 사용
  • reduce의 첫번째 인자인 콜백함수는 최대 4개의 인자를 받을수있는데, 그중 세번째 인자가 index인 점을 활용했다.
function solution(absolutes, signs){
  return absolutes.reduce((acc,cur,idx)=>{
    if(!signs[idx]) return acc+(-1)*cur;
    return acc+cur;
  },0)
}

다른 사람의 풀이

  • reduce만 사용
  • 삼항연산자를 사용해서 조건을 더 간단하게 표현했다.
function solution(absolutes, signs){
  return absolutes.reduce((acc,cur, i)=> acc + (val * (signs[i]?1:-1)),0);
}

Array.prototype.reduce()

arr.reduce(callback[, 초기값])

  • callback
    배열의 각 요소에 대해 실행할 함수로 네가지 인수를 받을 수 있다.
    • accumulator
      콜백의 반환값이 누적된 값으로, reduce의 두번째 인자인 초기값이 있다면 accumulator는 초기값이다. 없다면 첫번째 요소.
    • currentValue
      처리할 현재 요소.
    • currentIndex optional
      처리할 현재요소의 인덱스로 초기값을 제공한 경우, 0부터 시작하고, 아니라면 1부터 시작한다.
    • array optional
      reduce()를 호출한 배열
  • 초기값
    callback의 최초 호출에서 첫번째 인수(acc)에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫번째 요소를 사용한다.
  • 반환값
    누적 계산의 결과값을 리턴한다.

다른 분의 풀이에서도 reduce만 사용했는데, if,else로 조건을 분기하지 않고 삼항연산자로 작성해 한줄로 코드를 완성한 것이 인상적이었다. 같은 풀이방법이지만 좀 더 간결하게 표현하는 방법을 고민해봐야겠다.

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글