:ledger: 문제 설명

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

:one: 제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

:two: 입출력 예

absolutes sings result
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 설명 #2

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

:pushpin: 3-2) 입출력 예 설명 #3

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

:ledger: 문제 풀이

const solution = (absolutes, sings) => {
  for (let i = 0; i < absolutes.length; i++) {
    sings[i] === true
      ? (absolutes[i] = Math.abs(absolutes[i]))
      : (absolutes[i] = absolutes[i] * -1);
  }
  return absolutes.reduce((a, b) => a + b, 0);
};
console.log(solution([4, 7, 12], [true, false, true]));

:one: 함수 선언

  • 화살표 함수를 사용하여 absolutessings를 매개변수로 받는다.

:two: 풀이

  • absolutes의 길이만큼 실행되어야 하기 때문에 for문을 사용함
  • absolutessings의 길이는 동일하기에 삼항연산자 조건식에 (sings[i] === true) 대입해줌
  • sings가 true 일 경우 absolutes[i] 에 양수로 반환
  • sings가 false 일 경우 absolutes[i] 에 음수로 반환
  • reduce 메서드를 사용해서 absolutes의 값을 전부 더해준 후 리턴한다.

:three: 결과 반환

  • absolutes = [4, -7, 12] 모든 값을 더해주면 9를 리턴한다.
  • absolutes = [-1,-2,3] 모든 값을 더해주면 0을 리턴한다.

:four: 실행

  • console.log(solution([4,7,12],[true,false,true])); 실행하면 9 츨력
  • console.log(solution([1,2,3],[false,false,true])); 실행하면 0 츨력

:fire: 다른 사람의 풀이 참고

이 문제는 프로그래머스에서 풀었던 문제인데, 스파르타 1주차 문제 풀이에서 나온지도 몰랐다.
답안 제출 후 튜터님의 코드와 비교를 해보았는데, 난 뭘 저렇게 힘든 길을 갔는지…
나는 반복문에서 처리 후 그 값을 다시 reduce메서드로 더해주었는데, 튜터님의 코드에서는 반복문 내에서 처리되도록 되어있어 훨씬 간결하고 한 눈에 보기도 쉽고 유지보수에도 용이한 것 같다.

앞으로 더 고민해보고 좋은 코드를 작성할 수 있도록 노력해야겠다.

// [최원장 튜터님의 풀이]
function solution(absolutes, signs) {
  let answer = 0;
  for (let i = 0; i < absolutes.length; i++) {
    signs[i] ? (answer += absolutes[i]) : (answer -= absolutes[i]);
  }
  return answer;
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges