TIL (Today I Learned)

자바) 등차수열 가볍게 알아보자!

Won's log 2024. 3. 26. 14:28

프로그래머스 알고리즘 문제, 부족한 금액 계산하기를 풀며 등차수열의 벽을 느꼈다.

중학생 때 공부했던 공식은 저 멀리 사라지고 이름만 알고 있는 상태이기에 문제를 바탕으로 간단한 정리를 해본다.

 

문제와 예시

 

여기서 잠깐!

 

아래에는 바로 답변이 보이기에 문제를 아직 풀지 않은 분들은 스스로 생각을 더해보고 참고하시길 추천한다 :)

 

 

 

 

등차수열로 푼 답변

class Solution {
    public long solution(int price, int money, int count) {
        long answer = -1;
        answer = (long)price*count*(count+1)/2 - money;
        return answer<=0?0:answer;
    }
}

 

주어진 코드에서 (long)price*count*(count+1)/2 부분은 등차수열의 합을 이용하여 계산한 것이다.  부분은 1부터 count까지의 합을 의미한다. 등차수열의  공식에 따르면 등차수열의 합은 (  +  ) * 항의 개수 / 2 계산할  있다. 

예를 들어, count가 4라면 1부터 4까지의 합은 (1 + 4) * 4 / 2 = 10 된.  계산을 위해 /2 사용하고 있다.  

따라서 주어진 코드는 주어진 가격에 따른 총합을 계산하고, 이를 이용하여 소지금보다 총가격이 많은 경우에는  차이를 반환하고, 그렇지 않은 경우에는 0 반환한다.

 

등차수열이란 연속하는 두 항 사이의 차이가 일정한 수열을 말한다.

간단히 말하면, 각 항이 이전 항에 일정한 값을 더해주면 만들어지는 수열이다.

예를 들어, 1부터 시작해서 매번 3을 더해가는 수열이 등차수열이다.
등차수열에서는 첫째 항을 "a"로, 등차를 "d"로 나타내기도 한다. 따라서 등차수열의 일반항은 "a + (n-1)d"로 나타낼 수 있다. 여기서 "a"는 첫째 항, "n"은 항의 위치(1부터 시작), "d"는 등차이다.


예를 들어, 위의 예시 수열에서는 "a = 1", "d = 3"이 된다. 그래서 일반항은 "1 + (n-1)3"이 된다.

등차수열의 합은 일반항들의 합을 구하는 것이다. 이는 등차수열의 특징을 이용하여 간단히 계산할 수 있다. 1부터 "n"까지의 합은 "(첫 항 + 끝 항) * 항의 개수 / 2"로 구할 수 있다.

 

 

아래는 등차수열을 모르는 상태로 내가 직접 푼 답변이다.

for문과 if문을 활용하여 풀이

class Solution {
    public long solution(int price, int money, int count) {
    
        long value = 0;
        long[] arrAnswer = new long[count];
        long answer = 0;
        
        for (int j = 1; j <= count; j++) {
            value = (long) price * j;
            arrAnswer[j-1] = value;
            answer += arrAnswer[j-1];
        }
        if (money>answer) {
            answer = 0;
        } else {
            answer = answer-money;
        }  
        return answer;
    }
}