문제설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한사항
- absolutes의 길이는 1 이상 1,000 이하입니다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력 예
입출력 예 설명
입출력 예 #1
- signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
- 따라서 세 수의 합인 9를 return 해야 합니다.
입출력 예 #2
- signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
- 따라서 세 수의 합인 0을 return 해야 합니다.
코드 설명
let sum = 0;
- sum이라는 변수를 선언하고 초기값을 0으로 설정합니다.
let answer = absolutes.map(function (trunc, i){...})
- absolutes 배열의 각 요소를 map 함수를 사용하여 순회합니다.
- map 함수를 통해 배열의 각 요소를 변환하고, 변환된 값들을 새로운 배열로 반환합니다.
- 이 때, map 함수의 두 번째 인자로 전달되는 인덱스 i를 사용하여 signs 배열의 요소를 가져옵니다.
if(signs[i]) sum += trunc;
else sum += (-1)*trunc;
- map 함수의 콜백 함수에서 조건에 따라 sum 변수에 값을 더해줍니다.
- signs[i]가 true인 경우 absolutes[i]를 그대로 더하고, false인 경우에는 absolutes[i]의 반대값을 더합니다.
map 함수가 반환하는 새로운 배열은 여기서 사용하지 않으므로, 해당 배열은 사용하지 않습니다.
return sum;
- sum 변수를 최종 결과로 반환합니다.
예를 들어, absolutes 배열이 [1, 2, 3], signs 배열이 [true, false, true]로 주어진다면 다음과 같이 동작합니다:
1은 true이므로 sum에 1을 더합니다. (sum = 1)
2는 false이므로 -2를 sum에 더합니다. (sum = -1)
3은 true이므로 sum에 3을 더합니다. (sum = 2)
따라서 함수 solution은 최종적으로 2를 반환합니다.
소스코드&결과
소스 코드
function solution(absolutes, signs) {
let sum = 0;
let answer = absolutes.map(function (trunc, i){
if(signs[i]) sum += trunc;
else sum += (-1)*trunc;
})
return sum;
}
실행 결과
다른 사람이 짠 코드
function solution(absolutes, signs) {
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
이 코드는 reduce 함수를 사용하여 absolutes 배열을 순회하면서 누적 합을 계산하고 있습니다.
reduce 함수는 누적 값을 계산하기 위해 콜백 함수를 사용합니다.
콜백 함수는 각 요소의 값을 받아 누적 값을 업데이트합니다.
콜백 함수는 다음과 같은 형태로 작성됩니다
(acc, val, i) => ...
acc: 누적 값 (accumulator).
val: 현재 처리되고 있는 요소의 값.
i: 현재 처리되고 있는 요소의 인덱스.
- 콜백 함수 내에서는 각 요소(val)를 signs 배열의 인덱스에 따라 더하거나 빼주는 연산을 수행합니다.
- signs[i]가 true인 경우 val을 그대로 더하고, false인 경우에는 val의 반대값을 더합니다.
- reduce 함수의 두 번째 매개변수로 초기 누적값을 0으로 설정합니다.
- reduce 함수가 계산한 최종 누적 값을 함수가 반환합니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[JAVA] 기사단원의 무기 (2) | 2023.07.27 |
---|---|
[JavaScript] 문자열 내 p와 y의 개수 (2) | 2023.07.25 |
[JavaScript] 자릿수 더하기 (0) | 2023.07.24 |
[JavaScript] x만큼 간격이 있는 n개의 숫자 (0) | 2023.07.23 |
[JAVA] 덧칠하기 (0) | 2023.07.22 |