안녕하세요.
디자인도 하고, 개발도 하는 '디발자 뚝딱'입니다.
드디어 늘 생각만 해왔던 프로그래머스 코딩테스트 문제를 풀기 시작했습니다.
처음으로 풀게 된 문제는 '월간 코드 챌린지 시즌2 > 음양 더하기'입니다.
저는 자바스크립트 문제로 풀었어요.
앞으로 프로그래머스 코딩테스트 관련된 포스팅을 올릴 때
1. 제가 먼저 문제를 푼 다음 코드 해석을 하고
2. 다른 사람의 풀이 중 가장 심플하면서도 좋은 코드를 가져와 코드 해석을 하겠습니다.
해석한 내용은 주석 혹은 설명글 달아놓을게요.
자 지금부터 '음양 더하기' 문제를 풀어보겠습니다.
프로그래머스 코딩 테스트 음양 더하기 (자바스크립트 js)
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한 사항
- absolutes의 길이는 1 이상 1,000 이하입니다.
: absolutes의 모든 수는 각각 1 이상 1,000 이하입니다. - signs의 길이는 absolutes의 길이와 같습니다.
: signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력 예
absolutes | signs | result |
[4,7,12] | [true,false,true] | 9 |
[1,2,3] | [false,false,true] | 0 |
입출력 예 설명
#1
signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
따라서 세 수의 합인 9를 return 해야 합니다.
#2
signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
따라서 세 수의 합인 0을 return 해야 합니다.
나의 풀이
자바스크립트로 풀었습니다.
function solution(absolutes, signs) {
// 변수를 지정하여 0을 담아줍니다. (값을 number로 타입 지정)
let sum = 0;
// for반복문을 absolutes의 갯수만큼 돌려줍니다. (signs의 갯수와 absolutes의 갯수는 같음)
for (let i = 0; i < absolutes.length; i++) {
// 만약 signs의 값이 true라면 sum 변수 안에 sum + absolute의 i번째 값을 더해서 담아줍니다.
if (signs[i] === true) {
sum = sum + absolutes[i];
console.log('sum1', sum);
// 만약 signs의 값이 false라면 sum 변수 안에 sum - absolute의 i번째 값을 빼서 담아줍니다.
} else {
sum = sum - absolutes[i];
console.log('sum2', sum);
}
}
// sum 출력
return sum;
}
다른 사람의 풀이
reduce의 함수 사용법 : 배열.reduce((누적값, 현잿값, 인덱스, 요소) => { return 결과 }, 초깃값);
function solution(absolutes, signs) {
// [코드 설명]
// absolutes 배열의 갯수만큼 반복문을 돌린다.
// 처음에 acc은 값이 없으므로 맨 뒤에 0으로 초깃값을 담아준다.
// 현재의 요소에 signs의 i번째 내용을 곱한 값을 누적값에 더해준다.
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
728x90