Lv. 1 - 음양 더하기 풀이과정
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한사항
-
absolutes
의 길이는 1 이상 1,000 이하입니다.-
absolutes
의 모든 수는 각각 1 이상 1,000 이하입니다.
-
- signs의 길이는 absolutes의 길이와 같습니다.
-
signs[i]
가 참이면absolutes[i]
의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
-
입출력 예
absolutes | sings | result |
---|---|---|
[4,7,12] | [true,false,true] | 9 |
[1,2,3] | [false,false,true] | 0 |
입출력 예 설명
3-1) 입출력 예 설명 #2
- signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
- 따라서 세 수의 합인 9를 return 해야 합니다.
3-2) 입출력 예 설명 #3
- signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
- 따라서 세 수의 합인 0을 return 해야 합니다.
문제 풀이
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]));
함수 선언
- 화살표 함수를 사용하여
absolutes
과sings
를 매개변수로 받는다.
풀이
-
absolutes
의 길이만큼 실행되어야 하기 때문에for문
을 사용함 -
absolutes
와sings
의 길이는 동일하기에 삼항연산자 조건식에(sings[i] === true)
대입해줌 -
sings
가 true 일 경우 absolutes[i] 에 양수로 반환 -
sings
가 false 일 경우 absolutes[i] 에 음수로 반환 -
reduce
메서드를 사용해서absolutes
의 값을 전부 더해준 후 리턴한다.
결과 반환
-
absolutes = [4, -7, 12]
모든 값을 더해주면 9를 리턴한다. -
absolutes = [-1,-2,3]
모든 값을 더해주면 0을 리턴한다.
실행
-
console.log(solution([4,7,12],[true,false,true]));
실행하면 9 츨력 -
console.log(solution([1,2,3],[false,false,true]));
실행하면 0 츨력
다른 사람의 풀이 참고
이 문제는 프로그래머스에서 풀었던 문제인데, 스파르타 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;
}
링크
- 문제 링크: 문제 링크
- Git: rarrit github
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges