❗ 문제
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/courses/30/lessons/76501
어떤 정수들이 있습니다.
이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와
이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다.
실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
❓ 나의 풀이
function solution(absolutes, signs) {
let answer = 0;
for (let i = 0; i < signs.length; i++) {
signs[i] ? answer += absolutes[i] : answer -= absolutes[i];
}
return answer;
}
for 문과 삼항연산자를 이용해서 풀었다.
문제 제한사항에 따르면, signs 와 absolutes 배열의 길이는 동일하다.
이말은 즉, 인덱스를 통해 두 배열을 함께 처리할 수 있다는 뜻!
answer 변수를 0으로 초기화 한 뒤, for 문으로 signs 배열을 순회한다.
그다음 삼항연산자를 이용해 각 인덱스에 대해 signs[i] 가 true 이면 absolutes[i] 의 값을 answer 에 더하고,
false 면 absolutes[i] 를 answer 에서 빼준다.
++) 다른 사람의 풀이(reduce)
function solution(absolutes, signs) {
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
reduce 메서드를 활용해서 문제를 간결하게 해결할 수 있었다.
우선, 초기값을 0 으로 설정한다.
각 요소에 대해 val(현재값)을 signs[i] 가 true 일 때는 그대로 더하고,
false 일 때는 음수로 변환하여 빼준다.
이렇게 처리한 값을 acc(누적값)에 계속 더해주면서 최종적으로 누적값을 반환한다.
숫자에 1을 곱하면 양수가 되고, -1을 곱하면 음수가 되는 사실은
너무나 당연하게 알고 있던 사실이였는데..
다른 방식으로도 풀어보는 연습을 통해 다양한 접근 방식을 익히는 것이 중요하다는 것을 느꼈다.
++) reduce?
reduce 메서드는 배열의 각 요소를 순회하며 누적 결과를 계산할 때 사용한다.
첫 번째 인자는 콜백함수, 두 번째 인자는 초기값이다.
콜백함수는 배열의 각 요소에 대해 호출되며, 누적값과 현재 요소를 인자로 받는다.
풀이를 보면,
acc → 누적값을 나타낸다.
val → 현재값을 나타낸다.
i → 현재 인덱스를 나타낸다.
💡 참고 문헌
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (Level 1, JavaScript) (0) | 2024.10.10 |
---|---|
[프로그래머스] 핸드폰 번호 가리기 (Level 1, JavaScript) (2) | 2024.10.04 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (Level 1, JavaScript) (3) | 2024.09.16 |
[프로그래머스] 정수 제곱근 판별 (Level 1, JavaScript) (0) | 2024.09.10 |
[프로그래머스] 문자열 내 p와 y의 개수 (Level 1, JavaScript) (0) | 2024.09.09 |