본문 바로가기
코딩테스트 연습

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

by 신재은👩🏼‍💻 2024. 4. 16.

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

제한사항
1 ≤ a ≤ 100
1 ≤ d ≤ 100
1 ≤ included의 길이 ≤ 100
included에는 true가 적어도 하나 존재합니다.

 

입출력 예
a d included result
3 4 [true, false, false, true, true] 37
7 1 [false, false, false, true, false, false, false] 10


import java.util.stream.IntStream;

class Solution {
    public int solution(int a, int d, boolean[] included) {
        int answer = 0;
        int[] arr1 = new int[included.length];
        for(int i=0; i<included.length; i++) {
            arr1[i] = a + d * i; 
        }
        answer = IntStream.range(0, included.length)
            .filter(i -> included[i])
            .map(i -> arr1[i])
            .sum();
        
        return answer;
    }
}


나는 이렇게 풀었다.

 

import java.util.stream.IntStream;

class Solution {
    public int solution(int a, int d, boolean[] included) {
        return IntStream.range(0, included.length).map(idx -> included[idx]?a+(idx*d):0).sum();
    }
}

 

남의 풀이를 보니 로직은 크게 차이가 없는데

내가 필요 없는 배열을 하나 더 만든 것 같다.

그냥 해당하는 숫자만 더하면 끝인데.

 

나의 군더더기는 이 코드에서 더 드러나는 것 같다.

 

class Solution {
    public int solution(int a, int d, boolean[] included) {
        int answer = 0;

        for(int i = 0; i < included.length; i++){
            if(included[i]){
                answer +=  a + (d*i);
            }
        }

        return answer;
    }
}

'코딩테스트 연습' 카테고리의 다른 글

수 조작하기 2  (0) 2024.04.17
주사위 게임 2  (0) 2024.04.16
콜라츠 수열 만들기  (0) 2024.04.13
약수 구하기  (0) 2024.04.13
가장 큰 수 찾기  (0) 2024.04.13