어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
signs[i]
가 참이면 absolutes[i]
의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.absolutes | signs | result |
---|---|---|
[4,7,12] | [true,false,true] | 9 |
[1,2,3] | [false,false,true] | 0 |
입출력 예 #1
[true,false,true]
이므로, 실제 수들의 값은 각각 4, -7, 12입니다.입출력 예 #2
[false,false,true]
이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.function solution(absolutes, signs) {
let answer = absolutes;
for(let i = 0; i<signs.length; i++) {
if(!signs[i]) {
answer[i] = absolutes[i] * -1
}
}
return answer.reduce((a, b) => a+b);
}
/*
내가 처음 작성한 코드이다.
1. answer 변수에 정수 배열 absolutes를 할당해준다.
2. 0부터 sigins의 길이만큼 1씩 증가하는 for문을 만든다.
이때 만약에 signs[i]가 falsy한 경우(false인 경우) answer[i]에 absolutes[i] * -1 로
변경시켜준다.(음수로 변경)
3. for문이 종료된 후 reduce 메서드를 통해서 answer에 있는 모든 요소를 다 더해준 값을 return 한다.
*/
const solution = (absolutes, signs) => {
let answer = 0;
for (let i = 0; i < absolutes.length; i+=1) {
signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
}
return answer;
}
/*
SOLUTION1과 같은 동작을 수행하지만 구현 방식을 조금 다르게 작성해보았다.
1. answer 변수에 0을 담아준다.
2. for문을 통해서 absolutes의 길이까지 변수 i를 0부터 1씩증가시켜주며 signs[i]가 true일 경우
answer에 absolutes[i]를 더해주고 false일 경우 answer에 absolutes[i]를 빼준다.
3. for문이 종료된 후 answer를 return 해준다.
*/
const solution = (absolutes, signs) =>
absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
/*
다른 분의 코드를 보다가 되게 간단한 방법으로 작성할 수 있다는것을 보고 놀랐다..
이 생각은 전혀 못했었는데,, 다시 한번 공부해볼겸 작성해 보았다.
1. reduce 메소드를 사용하여 absolutes 배열을 순회하면서 각 요소에 대한 계산을 수행한다.
초기값으로 0인 acc 변수를 설정한다.
2. 현재 요소인 val과 동일한 인덱스의 signs[i] 값을 비교하여 signs[i]가 true면
현재 요소(val)에 1을 곱하여 결과(acc)에 더해준다.
false라면 현재 요소(val)에 -1을 곱하여 결과(acc)에 더해준다.
3. acc 값을 return 해준다.
*/