본문 바로가기

코딩도 합니다/Programmers

[프로그래머스 programmers] 월간 코드 챌린지 시즌2 > 음양 더하기 js



안녕하세요.
디자인도 하고, 개발도 하는 '디발자 뚝딱'입니다.

드디어 늘 생각만 해왔던 프로그래머스 코딩테스트 문제를 풀기 시작했습니다.
처음으로 풀게 된 문제는 '월간 코드 챌린지 시즌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