프로그래머스: 음양 더하기(reduce)




프로그래머스 ‘음양 더하기’ 문제.

절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return



나의 해결방안

case1

function solution(absolutes, signs) {
    var answer = 0;
    const sum = [];
    for(let i=0; i<absolutes.length; i++){
      if(signs[i]){
          sum.push(absolutes[i])
        }else{
          sum.push(-absolutes[i])
        }
    }
    answer = sum.reduce((arr,cur)=>{arr+cur},0);
    return answer;
}

우선은 배열이기 때문에 absolutes의 길이만큼 for문을 돌린다.

처음에는 2중for문을 사용해야하나 고민했는데 굳이 그럴필요 없이 index값만 받아오면 되는거기때문에

absolutes에서 index를 가져오고 돌린다. signs의 index도 absolutes의 index와 같이 동일하게 사용한다.

그래서 absolutes의 0번째 값(=4)이 signs의 0번째 값(=true)일때는 양수의 4, 만약에 0번째 값이 false라면 -4가 된다

그런식으로 불린 타입을 비교해주면서 true면 양수, false면 음수를 붙여주고,

원래의 수를 다 합친값을 리턴했다.



근데 이렇게 말고 훨씬 더 간단하게 풀 수 있다.



case1과 같은 풀이 (=삼항연산자 사용)

for(let i = 0; i <absolutes.length; i++){
	answer += signs[i] ? absolutes[i] : -absolutes[i]
}

이렇게 보니까 진짜 이렇게 하면되는데 굳이굳이 돌려 풀었네…

아 부끄럽….





case 2

function solution(absolutes, signs) {
    const answer = absolutes.reduce((acc, cur, i) => {
        return acc + (signs[i]
                     ?   cur    //true일경우 양수를 더해준다
                     : -cur     //false인경우 음수를 빼준다
                     )
    },0)
    return answer;
}

reduce 메소드를 사용한 풀이

absolutes배열의 값을 전의 값과 후의 값을 더해서 (인덱스도 같이) true일 경우 양수, false일 경우 음수를 더해서 리턴한다

리듀스 쓰면쓸수록 진짜 강려쿠함을 느낌…










© 2018. by sora

Powered by sora