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

minji jeon·2022년 7월 18일
0

알고리즘

목록 보기
13/29
post-thumbnail

1. 문제

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

2. 접근

true가 있으면 배열에 +를 붙여주고
false가 있으면 배열에 -를 붙여주고
그 합을 구해줘야 한다.
우선 number에 +와 -를 어떻게 붙여줘야 할까 고민했다.
if문과 for문을 사용하여 false와 true일시 +하고 false일때 -를 준다.

3. 내답

function solution(absolutes, signs) {
    let a = absolutes
    let b = signs
    let result = 0
    
        for(let i = 0 ; i< b.length; i++){
      (b[i] ?  result += a[i] :result -= a[i])}
    return result
}
    

배열의 길이만큼 반복문이 돌때,
signs가 true라면 result라는 변수에 absolutes를 더하고, false라면 result라는 변수에 absolutes를 뺀다.

4. 남의답

   function solution(absolutes, signs) {
        return absolutes.reduce((acc, val, i) => 
        acc + (val * (signs[i] ? 1 : -1)), 0);
} 

우선 값을 다 더하는 +=코드를 사용할 경우에는
누적함수를 더할 수 있는 reduce함수를 사용할 수 있다.
signs가 true일 경우 val값에 1을 곱하고
false일 경우 val값에 -1을 곱하여 값을 -로 만들어준다.
그리고 그값을 acc에 계속 누적시켜준다.
그리고 initial value에 0을 넣은 이유는 signs가 true인지 false인지 검사를 해서 더해줘야 하기때문이다.
0을 넣으면 acc가 0부터 시작하고
val값은 배열의 첫번째 값이 된다.

오늘의 깨달음

reduce의 initial에 0값을 사용하는 이유.--> val값에 0을 주고, initialvalue를 첫번째 배열부터 시작하도록 하기 위해사용한다ㅏ..

profile
은행을 뛰쳐나와 Deep Dive in javascript

0개의 댓글