극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩 기초 트레이닝

[프로그래머스, LV.0] 등차수열의 특정한 항만 더하기

sundori 2023. 5. 17. 16:47

목차

     

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

    문제 설명:

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

     

    제한사항:

    • 1 <= a <= 100
    • 1 <= d <= 100
    • 1 <= included.length <= 100
    • included에는 true가 최소 하나 존재.

    입출력 예

    #2 코드 및 알고리즘

     

    class Solution { 등차 수열 공식을 사용하였다.  a_{n}=a_{x}+(n-x)d
        public int solution(int a, int d, boolean[] included) {
            int sum = 0;
            for(int i = 1; i <= included.length; i++){
                if(included[i - 1] == true)
                    sum += (a + (i - 1) * d);
            }
            return sum;
        }
    }
    ------------------------------------------------------------
    정확성  테스트
    테스트 1 〉	통과 (0.04ms, 73.8MB)
    테스트 2 〉	통과 (0.04ms, 87.4MB)
    테스트 3 〉	통과 (0.04ms, 78.9MB)
    테스트 4 〉	통과 (0.02ms, 80.5MB)
    테스트 5 〉	통과 (0.03ms, 82.1MB)
    테스트 6 〉	통과 (0.02ms, 73.3MB)
    테스트 7 〉	통과 (0.02ms, 69.6MB)
    테스트 8 〉	통과 (0.03ms, 71.9MB)
    테스트 9 〉	통과 (0.02ms, 75.4MB)
    테스트 10 〉	통과 (0.03ms, 76.1MB)
    테스트 11 〉	통과 (0.02ms, 71.2MB)
    테스트 12 〉	통과 (0.02ms, 77.5MB)
    테스트 13 〉	통과 (0.04ms, 77.7MB)
    테스트 14 〉	통과 (0.03ms, 86.2MB)
    테스트 15 〉	통과 (0.03ms, 71.4MB)
    테스트 16 〉	통과 (0.04ms, 74.8MB)
    테스트 17 〉	통과 (0.03ms, 83.3MB)
    테스트 18 〉	통과 (0.03ms, 77.8MB)
    테스트 19 〉	통과 (0.03ms, 73.4MB)
    테스트 20 〉	통과 (0.02ms, 81.8MB)
    테스트 21 〉	통과 (0.03ms, 77.9MB)
    테스트 22 〉	통과 (0.04ms, 72.7MB)
    테스트 23 〉	통과 (0.02ms, 74.8MB)
    테스트 24 〉	통과 (0.03ms, 76MB)
    테스트 25 〉	통과 (0.03ms, 75.2MB)
    테스트 26 〉	통과 (0.03ms, 73MB)
    테스트 27 〉	통과 (0.02ms, 73.3MB)
    테스트 28 〉	통과 (0.04ms, 69.2MB)
    채점 결과
    정확성: 100.0
    합계: 100.0 / 100.0

    풀이:

    위의 공식을 사용하여...

    • included [i] 번 원소가 true일 때만 (a + (i - 1) * d)를 저장하는데 기존에 저장되어 있던 것도 같이 더한다.
    • sum = (a + (i - 1) * d) + sum;
    import java.util.stream.IntStream;
    class Solution {
        public int solution(int a, int d, boolean[] included) {
            return IntStream.range(0, included.length).map(i -> included[i] == true ? (a + (i * d)) : 0).sum();
        }
    }
    --------------------------------------------------------------------------------------
    정확성  테스트
    테스트 1 〉	통과 (2.99ms, 77.5MB)
    테스트 2 〉	통과 (2.62ms, 72.7MB)
    테스트 3 〉	통과 (3.09ms, 77.9MB)
    테스트 4 〉	통과 (7.70ms, 73.6MB)
    테스트 5 〉	통과 (4.95ms, 75.3MB)
    테스트 6 〉	통과 (3.51ms, 77.6MB)
    테스트 7 〉	통과 (5.13ms, 82.9MB)
    테스트 8 〉	통과 (3.36ms, 77.5MB)
    테스트 9 〉	통과 (2.90ms, 78.6MB)
    테스트 10 〉	통과 (3.09ms, 75.4MB)
    테스트 11 〉	통과 (3.31ms, 87.2MB)
    테스트 12 〉	통과 (3.58ms, 70MB)
    테스트 13 〉	통과 (2.79ms, 79.8MB)
    테스트 14 〉	통과 (3.16ms, 75.3MB)
    테스트 15 〉	통과 (4.51ms, 78.4MB)
    테스트 16 〉	통과 (2.54ms, 79.9MB)
    테스트 17 〉	통과 (8.60ms, 68.3MB)
    테스트 18 〉	통과 (3.88ms, 82.2MB)
    테스트 19 〉	통과 (2.64ms, 72.1MB)
    테스트 20 〉	통과 (3.25ms, 72.3MB)
    테스트 21 〉	통과 (2.35ms, 76.7MB)
    테스트 22 〉	통과 (3.37ms, 78.3MB)
    테스트 23 〉	통과 (6.99ms, 74.2MB)
    테스트 24 〉	통과 (2.49ms, 82.5MB)
    테스트 25 〉	통과 (2.58ms, 78.4MB)
    테스트 26 〉	통과 (3.04ms, 72.5MB)
    테스트 27 〉	통과 (2.30ms, 76.9MB)
    테스트 28 〉	통과 (2.31ms, 76.8MB)
    채점 결과
    정확성: 100.0
    합계: 100.0 / 100.0

    저번에 stream API에 대해 공부하기 시작했다. 이렇게 편할 줄이야.. 그런데 컴파일 시간 차이가 난다.

    https://ko.wikipedia.org/wiki/등차수열 사진 출처.