프로그래머스 알고리즘 문제, 부족한 금액 계산하기를 풀며 등차수열의 벽을 느꼈다.
중학생 때 공부했던 공식은 저 멀리 사라지고 이름만 알고 있는 상태이기에 문제를 바탕으로 간단한 정리를 해본다.
문제와 예시
여기서 잠깐!
아래에는 바로 답변이 보이기에 문제를 아직 풀지 않은 분들은 스스로 생각을 더해보고 참고하시길 추천한다 :)
등차수열로 푼 답변
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;
}
}
'TIL (Today I Learned)' 카테고리의 다른 글
자바 - 최대공약수와 최소공배수 구하기 (0) | 2024.03.28 |
---|---|
자바) 문자열이 숫자인지 확인하는 방법 (참고 프로그래머스 - 문자열 다루기) (0) | 2024.03.26 |
자바) 배열을 문자열로 변환하는 방법 (char 배열 포함) (0) | 2024.03.25 |
Java에서 대소문자 크기 비교하기 (참고: 프로그래머스 - 자바 - 문자열 내림차순으로 배치하기) (0) | 2024.03.25 |
자바) 문자를 char 타입의 배열로 변환하는 2가지 방법 (0) | 2024.03.25 |