본문 바로가기
알고리즘/Programmers

[TIL] 2023.05.10 Programmers_등차수열의 특정한 항만 더하기

by heereal 2023. 5. 10.

등차수열의 특정한 항만 더하기

문제 설명

두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.

 

 

입출력 예

a b included result
3 4 [true, false, false, true, true] 37
7 1 [false, false, false, true, false, false, false] 10

 

 

나의 풀이

function solution(a, d, included) {
    let array = Array(included.length).fill(0).map((v, i) => a + i * d);
    return included.reduce((acc, cur, i) => acc + (cur && array[i]), 0);
}
  1. 등차수열 array를 생성한다.
  2. reduce 메서드를 이용해서 included의 요소가 true일 때만 acc에 더해준다.

 

다른 사람의 풀이

function solution(a, d, included) {
    return included.reduce((acc, flag, i) => {
        return flag ? acc + a + d * i : acc
    }, 0)
}

이 풀이를 보고 나서 굳이 등차수열을 따로 생성할 필요 없이 reduce 메서드 하나로 해결할 수 있다는 점을 깨달았다..!

 

 

수정한 풀이

function solution(a, d, included) {
    return included.reduce((acc, cur, i) => acc + (cur && a + i * d), 0);
}

이렇게 문제 풀이 시간 단축 시켰을 때 기분 좋음 ㅎㅎ

 

 

댓글