[자바스크립트]프로그래머스 레벨1 - 음양 더하기
문제
배열 absolute에는 어떤 정수의 절대값이 담겨 있고 배열 sign에는 absolute의 값이 음인지 양인지를 판단하는 true, false 형태의 boolean 값이 들어있다. 이 두개의 배열을 input 하여 실제 정수의 합을 return 시키면 된다.
일단 배열이 두개 주어졌으니 배열을 순회하며 값을 비교해야 겠다고 생각했다. 그리고 자바스크립트의 filter함수를 써야겠다고 생각했다. filter의 index 파라미터를 통해 sign의 값을 쉽게 가져와 비교할 수 있기 때문이다.
제한사항
sign의 길이와 absolute 배열의 길이는 같다.
그리고 sign이 true면 양의 정수, false면 음의 정수임을 나타낸다.
답
function solution(absolutes, signs) {
var answer = 0;
absolutes.filter((val, index) => {
if(signs[index] === false) { //index를 이용해 sign의 값을 가져와 false라면
val *= -1; //값에 -1을 곱해준다.
}
answer += val;
});
return answer;
}
filter 함수는 3개의 파라미터를 받을 수 있다.
[예시]
let numbers = [2, 5, 7]
let parameters = numbers.filter((num, index, arr) =>
{console.log(num, index, arr)})
// 결과
2 0 [ 2, 5, 7 ]
5 1 [ 2, 5, 7 ]
7 2 [ 2, 5, 7 ]
이런 식으로 배열의 하나하나를 순회하는 num파라미터와 순회한 배열의 인덱스를 나타내는 index, 그리고 현재 배열의 값들을 나타내는 arr을 파라미터로 받는다.
filter함수를 사용할 때 각 파라미터를 잘 활용해야겠다.
본문의 답은 filter함수의 val과 index를 활용하여 sign배열의 같은 위치에 있는 값을 가져와 비교해주었다.
비교
filter함수 외에도 reduce나, forEach문을 사용하여 다양한 방법으로 배열을 조회하여 문제를 푼 것을 알 수 있었다.
absolutes.forEach((v, i) => {
if (signs[i]) {
answer += v;
} else {
answer -= v;
}
})
forEach도 배열의 값인 v와 인덱스의 값인 i를 활용하여 문제를 푼 것을 알 수 있었다.
다른 사람의 풀이를 보며 다양한 함수의 기능을 다시 한 번 복습할 수 있는 점은 정말 좋은 것 같다.