ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해 99 - 음양 더하기
    알고리즘 공부/JavaScript 문제 2023. 4. 15. 21:00

    [ 문제 ]

    어떤 정수들이 있습니다. 

    이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 

    실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

    • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
    • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

     

    [ Input / Output 예시 ]

    absolutes signs Output
    [4,7,12] [true,false,true] 9
    [1,2,3] [false,false,true] 0

     


    [ 풀이 ]

    풀이 (1)

    배열의 길이만큼 for문 반복하여 true이면 더하고 false면 빼면서 변수에 누적한다.

     

    풀이 (2)

    reduce 함수를 사용하여 연산을 진행한다.

    reduce 함수의 콜백함수 매개변수는 (누적변수, 원소, 인덱스) 이므로 absolutes 인덱스를 이용해서 signs와 같은 자리의 값을 가져온다.

    부호는 삼항연산자를 사용해서 결정한다.

     

    [ 코드 ]

    // 풀이 (1)
    const solution1 = function (absolutes, signs) {
        // 배열의 값을 더할 변수
        let sum = 0;
        // 배열의 길이만큼 for문 돌리기
        for (let i=0 ; i<absolutes.length ; i++) {
            // 삼항연산자를 이용해서 signs의 값이 true이면 absolutes를 양수로 false면 음수로 더해준다.
            sum += (signs[i]===true) ? absolutes[i] : -absolutes[i]
        }
        return sum;
    }
    
    console.log(solution1([4,2,3], [false,false,true]))
    
    
    // 풀이 (2)
    // reduce 사용
    const solution2 = function (absolutes, signs) {
        return absolutes.reduce((sum, cur, i) => {return sum + ((signs[i]===true) ? cur : -cur)},0)
    }
    
    console.log(solution2([4,2,3], [false,false,true]))

     

    댓글

Designed by Tistory.