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

김엄지·2024년 4월 2일

알고리즘

목록 보기
30/90

🐤 목표

앞으로 매일 꾸준히 코딩테스트를 진행하면서 단계를 높여가보자.

문제 설명

두 정수 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가 적어도 하나 존재합니다.

입출력의 예

문제 풀이

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 + (i * d);
                continue;
            }
        }
        return answer;
    }
}

1) 반복문으로 배열의 각 항목을 확인
2) if(included[i]) { 현재 항이 포함되어 있는지 확인
3) 현재 항의 값을 answer에 더함
4) continue; 현재 항이 포함되지 않은 경우 다음 항목을 확인하기 위해 반복문의 다음 반복으로 넘어감

  • 코드가 간결하고 이해하기 쉽다는 장점이 있지만, 불필요한 항들도 계산하기 힘들어지는 단점이 존재한다.
  • 만약 포함되지 않은 항이 연속적으로 나타난다면 해당 부분은 계산하지 않아도 된다.
  • 반복문에서 불필요한 항들을 건너뛰도록 코드를 수정해보자.

문제 풀이 2

class Solution {
    public int solution(int a, int d, boolean[] included) {
        int answer = 0;
        int current = a;
        
        for (int i = 0; i < included.length; i++) {
            if (included[i]) {
                answer += current;
            }
            current += d;
            
            // 다음 항이 포함되지 않은 경우, 현재 항을 더하지 않고 건너뜁니다.
            while (i + 1 < included.length && !included[i + 1]) {
                i++;
                current += d;
            }
        }
        
        return answer;
    }
}

1) int current = a; 현재 항의 값을 나타내는 변수 current를 초기화. 초기값은 등차수열의 첫 번째 항인 a
2) 마찬가지로 반복문을 돌면서
3) 만약 현재 항이 포함되어 있다면, 해당 항의 값을 결과값에 더함
4) 현재 항이 포함되지 않은 경우, 건너뛰기 위한 반복문을 시작
5) current += d; 현재 항에 공차를 더함

불필요한 계산을 피하긴 했지만, 식이 더 길어졌다.. ^^


등차수열의 개념

등차수열

  • 등차수열은 일정한 차이를 가지고 연속하는 숫자들의 나열
  • 일정한 차이를 '공차'
  • 등차수열의 일반항

profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글