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

2025. 7. 12. 11:59·CODING TEST/programmers

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - a와 b 출력하기

- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181931

 

 

📌 문제 요약

- 핵심 조건: 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return

- 제한: 1 ≤ a, 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++) {
            int term = a + (i * d);

            if (included[i]) {
                answer += term;
            }
        }

        return answer;
    }
}

- for문으로 접근하는 방법까지는 알았으나 그 이후로 모르겠.. 그래서 그냥 틀리고 답을 봤음.

- 등차수열 항을 하나씩 만들어서, true인 항만 골라서 다 더함.

1️⃣ 첫째항 a와 공차 d를 이용 -> 등차수열의 i번째 항 : a + i × d.

2️⃣ included[i] = true -> 그 항을 결과값에 더함.

3️⃣ 모든 항을 돌면서 true인 것만 골라서 다 더한 뒤 결과 리턴.

 

 

📌 다른 사람들 풀이

//1
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();
    }
}

<-- 다른 풀이 요약 -->

- 1 : Stream 방식 : 간단하고 짧게 한 줄로 쓰고 싶을 때 (함수형이라 코드 짧고 깔끔함.)

항목  1번 (Stream) 내 코드
스타일 함수형 프로그래밍 절차지향 프로그래밍
반복 방식 IntStream.range() for (int i = 0; i < ... )
조건 분기 삼항 연산자 (? :) if 조건문
합산 방식 .sum() 으로 자동 합 answer += term 으로 수동 합
가독성 짧고 간결하지만 익숙하지 않으면 읽기 어려움 직관적이고 초보자에게 익숙함
유연성 조건 추가/변경이 조금 더 불편 수정/디버깅하기 쉬움



 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** Stream **

- IntStream.range(start, end)는 [start, end) (end는 포함 X)

목적  코드 예시  설명
인덱스 반복 IntStream.range(0, arr.length) 0부터 arr.length-1까지 반복 (end는 미포함)
배열 값 반복 Arrays.stream(arr) 배열의 요소를 스트림으로 처리
map (값 변형) .map(i -> i * 2) 각 값을 2배로 변형
filter (조건 걸기) .filter(i -> i % 2 == 0) 짝수만 남김
합계 .sum() 요소 전체의 합
곱셈 누적 .reduce((a, b) -> a * b).getAsInt() 전체 곱 계산
boolean 배열 true 개수 IntStream.range(0, arr.length).filter(i -> arr[i]).count() true 개수 세기
팩토리얼 IntStream.rangeClosed(1, n).reduce(1, (a, b) -> a * b) 1부터 n까지 곱

 

** 자주 쓰이는 수학 공식들 **

분류  공식  설명
등차수열 n번째 항 aₙ = a + (n - 1) × d 첫째항 a, 공차 d
등차수열 합 Sₙ = n × (2a + (n - 1) × d) / 2 앞 n개 합
등차수열 인덱스 i 항 a + i × d 0-based 인덱스로 쓸 때
1부터 n까지 합 n × (n + 1) / 2 기본 합 공식
1부터 n까지 제곱합 n × (n + 1) × (2n + 1) / 6 자주 등장
1부터 n까지 세제곱합 (n × (n + 1) / 2)² (합)²
팩토리얼 n! = n × (n-1) × ... × 1 스트림으로도 구현 가능
최대공약수 (GCD) gcd(a, b) = gcd(b, a % b) 유클리드 알고리즘
최소공배수 (LCM) lcm(a, b) = a × b / gcd(a, b) GCD를 활용
조합 nCr n! / (r! × (n - r)!) 순열/조합 계산 시

- 팩토리얼: int fact = IntStream.rangeClosed(1, n).reduce(1, (a, b) -> a * b);

int gcd(int a, int b) {					// 최대공약수
    return b == 0 ? a : gcd(b, a % b);
}

int lcm(int a, int b) {					// 최소공배수
    return a * b / gcd(a, b);
}

long comb(int n, int r) {				// 조합
    return fact(n) / (fact(r) * fact(n - r));
}

- 이 페이지 다시 정독하기..

'CODING TEST > programmers' 카테고리의 다른 글

Day5 - 이어 붙인 수  (0) 2025.07.14
Day5 - 코드 처리하기  (0) 2025.07.14
Day5 - 원소들의 곱과 합  (0) 2025.07.12
Day5 - 주사위 게임 2  (0) 2025.07.12
Day4 - flag에 따라 다른 값 반환하기  (0) 2025.07.11
'CODING TEST/programmers' 카테고리의 다른 글
  • Day5 - 이어 붙인 수
  • Day5 - 코드 처리하기
  • Day5 - 원소들의 곱과 합
  • Day5 - 주사위 게임 2
iamyuunzo
iamyuunzo
https://github.com/iamyuunzo
  • iamyuunzo
    iamyuunzo
    iamyuunzo
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Study (5)
        • App Developer (0)
        • Algorithm study (0)
        • Google AI Essentials (3)
      • Project (3)
        • 감행 (3)
        • Tokkit (0)
        • 다시, 봄 (0)
        • Clone Coding (0)
      • 자격증 모음 (5)
        • AWS Certification (1)
        • 정보처리기사 (0)
        • 빅데이터분석기사 (1)
        • TOEIC Speaking (3)
      • CODING TEST (79)
        • baekjoon (26)
        • programmers (20)
        • MySQL (31)
        • COS Pro (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    AWS Certification
    baekjoon
    회고
    toeic speaking
    프로젝트 리팩토링
    우리 fisa
    CLF-C02
    우리fis아카데미
    프로그래머스
    COS Pro
    회고록
    백준
    SQL
    우리fisa
    Programmers
    토익 스피킹
    클라우드서비스개발
    AWS Certified Cloud Practitioner
    java
    감행
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
iamyuunzo
Day5 - 등차수열의 특정한 항만 더하기
상단으로

티스토리툴바