PS/프로그래머스 입문 100제
[프로그래머스] LV.0 연속된 숫의 합 - 자바 [96/100]
yaho!!
2024. 7. 12. 13:49
💬 문제 설명
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
🚫 제한 사항
- 1 ≤ num ≤ 100
- 0 ≤ total ≤ 1000
- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
📢 입출력 예
👨🏫 입출력 예 설명
📃 제출 코드
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int start = 0;
for (int i = -1000; i <= total; i++) {
int startNum = i;
int result = 0;
for (int j = 0; j < num; j++) {
startNum += 1;
result += startNum;
}
if (result == total) {
start = i + 1;
break;
}
}
for (int i = 0; i < answer.length; i++) {
answer[i] = start + i;
}
return answer;
}
}
✏ 해결방법 & 배운점
시작 숫자 찾기
- -1000부터 total까지의 숫자 i를 순회합니다.
- startNum 변수는 현재 시작 숫자를 저장합니다.
- result 변수는 현재 시작 숫자부터 연속된 `num` 개의 숫자의 합을 저장합니다.
연속된 숫자의 합 계산
- `num`개의 연속된 숫자를 더하여 `result`에 저장합니다.
- `startNum`은 매 반복마다 1씩 증가하여 다음 숫자를 더합니다.
결과 비교
- result가 total과 같으면, start를 현재 시작 숫자의 다음 숫자로 설정하고 루프를 종료합니다.
- start는 실제 배열의 시작 숫자가 됩니다.
결과 배열 채우기
- `start`부터 `num`개의 숫자를 `answer` 배열에 저장합니다.
- answer[i]에 start + i 값을 저장하여 연속된 숫자를 생성합니다.
++) 다른 사람 풀이 리뷰
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int check = num*(num+1) / 2;
int start = (total - check) / num + 1;
for (int i = 0; i < answer.length; i++) {
answer[i] = start + i ;
}
return answer;
}
}
기본 합 계산:
- `int check = num * (num + 1) / 2;`를 통해 1부터 num까지의 합을 구합니다.
- 이는 가우스의 합 공식을 사용하여 구합니다. 예를 들어, num이 4일 경우, check는 10이 됩니다.
시작 숫자 계산
- `int start = (total - check) / num + 1;` 을 통해 시작 숫자를 계산합니다.
- `total - check` 는 주어진 total에서 1부터 num까지의 합을 뺀 값입니다.
- 이 값은 연속된 숫자들이 더해져야 할 값의 총 합을 나타냅니다.
- 이 값을 num으로 나누고 1을 더하는 이유는, 시작 숫자부터 num 개의 연속된 숫자를 만들기 위함입니다.
반복문을 통한 배열 채우기
- `for (int i = 0; i < answer.length; i++) { answer[i] = start + i; }` 을 통해 배열 answer를 채웁니다.
- 시작 숫자 start부터 시작하여 숫자를 하나씩 증가시키면서 배열을 채웁니다.
결과 반환:
- 완성된 배열 answer를 반환하여 결과를 출력합니다.
num이 5이고 total이 35인 경우
check 계산
- check = 5 * (5 + 1) / 2 = 15
- 따라서, 1부터 5까지의 합은 15입니다.
시작 숫자 계산
- start = (35 - 15) / 5 + 1 = 5
- 즉, 시작 숫자는 5입니다.
배열 채우기
- answer = {5, 6, 7, 8, 9}
이렇게 해서 총 5개의 연속된 숫자들의 합이 35가 되도록 배열이 생성됩니다.
가우스 합 공식
- 연속된 숫자의 합을 구하는 기본적인 방법은 가우스 합 공식으로 구할 수 있습니다.
- 연속된 숫자의 합 = $\frac{n * (n+1)}{2}$
- 이 공식을 사용하면 1부터 n까지의 합을 빠르게 계산할 수 있습니다.
1부터 4까지의 합 구하기
- $1 + 2 + 3 + 4 = \frac{4 * (4+1)}{2} = \frac{4 * 5}{2} = 10$
- 따라서, 1부터 4까지의 합은 10입니다.
이 공식을 통해 연속된 숫자의 합을 쉽게 계산할 수 있습니다.