[프로그래머스] 음양 더하기 (javascript)
https://programmers.co.kr/learn/courses/30/lessons/76501
코딩테스트 연습 - 음양 더하기
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 re
programmers.co.kr
해결 방법
1. signs의 i번째가 true면 absolutes의 i번째 요소를 answer에 누적하여 더하고 false면 -1을 곱한 후 더한다
풀이 1
function solution(absolutes, signs) {
var answer = 0;
for (let i = 0; i < signs.length; i++){
if (signs[i] === true){
answer += absolutes[i];
} else{
answer += absolutes[i] * -1;
}
}
return answer;
}
풀이 2
function solution(absolutes, signs) {
var answer = 0;
for (let i = 0; i < signs.length; i++){
signs[i] ? answer += absolutes[i] : answer += absolutes[i] * -1
}
return answer;
}
배운 점
1. reduce와 삼항 연산자를 애용하자
reduce와 삼항 연산자가 알고리즘 풀이에서 자주 사용되는 것을 느꼈다
특히 배열에서 요소들의 합과 같은 연산을 할 때 for문 대신 reduce를 사용하고
if문 대신 삼항 연산자를 사용하면 코드가 더욱 간결해지는 것 같다
reduce와 삼항 연산자를 사용하면 다음과 같이 한 줄로 표현할 수 있다
function solution(absolutes, signs) {
return absolutes.reduce((acc, val, i) => acc + (signs[i] ? val : -val), 0);
}
reduce와 삼항 연산자 사용이 익숙해지도록 노력해야겠다
2. forEach
배열의 요소 각각을 한 번씩 실행하는 forEach를 사용한 풀이를 발견했다
참고 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
Array.prototype.forEach() - JavaScript | MDN
forEach() 메서드는 주어진 함수를 배열 요소 각각에 대해 실행합니다.
developer.mozilla.org
문법은 다음과 같다
forEach((현재 요소, 현재 요소의 인덱스, 순회 중인 배열) => 실행문)
현재 요소의 인덱스와 순회 중인 배열은 생략 가능하다
아래는 for문과 비교한 것이다
const items = ['item1', 'item2', 'item3'];
const copy = [];
// for
for (let i=0; i<items.length; i++) {
copy.push(items[i]);
}
// forEach
items.forEach(function(item){
copy.push(item);
});
매번 for문만 사용해왔는데 이젠 forEach도 머릿 속에 넣어야겠다
forEach를 사용한 풀이는 다음과 같다
function solution(absolutes, signs) {
var answer = 0;
absolutes.forEach((val, i) => signs[i] ? answer += val : answer += val * -1);
return answer
}