문제 설명
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
제한사항
- 1 ≤ num ≤ 100
- 0 ≤ total ≤ 1000
- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
입출력 예
num | total | result |
3 | 12 | [3, 4, 5] |
5 | 15 | [1, 2, 3, 4, 5] |
4 | 14 | [2, 3, 4, 5] |
5 | 5 | [-1, 0, 1, 2, 3] |
입출력 예 설명
입출력 예 #1
- num = 3, total = 12인 경우 [3, 4, 5]를 return합니다.
입출력 예 #2
- num = 5, total = 15인 경우 [1, 2, 3, 4, 5]를 return합니다.
입출력 예 #3
- 4개의 연속된 수를 더해 14가 되는 경우는 2, 3, 4, 5입니다.
입출력 예 #4
- 설명 생략
코드
public static int[] solution(int num, int total) {
int[] answer = new int[num];
int start = 0;
while(true) {
int sum = 0;
for(int i = start; i < start + num; i++) {
sum+=i;
}
if(sum == total) {
for(int i = 0; i < num; i++)
{
answer[i] = start;
start++;
}
break;
}
else if(sum < total) {start++;}
else {start--;}
}
return answer;
}
풀이
num만큼 연속된 수로 total의 합이 된다는 것은
즉 num = 3 일때
{1, 2, 3} 이나 {4, 5, 6} 처럼 연속되는 3개의 수의 합이
total 이 되어야 하는 것이다.
그래서 num = 3, total = 12 이면
3 + 4 + 5 = 12 이기에
이 {3, 4, 5} 를 찾아야 하는 것이다.
그러면 어떻게 할까 생각했는데
처음에 0(start) 부터 num까지의 합을 now total이라고 합시다.
이때 start가 1 더해지면 now totoal이 num 만큼 늘어나고
1 빼지면 now total이 num 만큼 줄어드는 것을 볼 수 있었다.
그래서 now total을 total 값과 비교해서
적으면 start + 1 을,
크면 start - 1을 해준다.
이렇게 차근차근 찾아가다보면 원하는 결과를 얻을 수 있습니다.
이를 이용해서 약간 수식처럼 만들어볼 수도 있는데요.
public static int[] solution(int num, int total) {
int[] answer = new int[num];
int start = 0;
int sum = 0;
for(int i = start; i < start + num; i++) {
sum+=i;
}
start += (total-sum)/num;
for(int i = 0; i < num; i++) {
answer[i]=start;
start++;
}
return answer;
}
풀이
start = 0 으로 해서
now total, 현재의 총합이 now total 이라고 할때
now total 은 결국 num 씩 커진다고 위에서 말했죠?
그러면 결국
(toal - now toal) / num 이 반복 되는 횟수가 되고
그것을 start에 더해주면
시작하는 숫자를 알게됩니다!!!!
앞에서 말한 방법과 결국에는 같은 맥락입니다.
좋은 방법을 선택해세요 ㅎㅎ
'프로그래머스 > Lv.0' 카테고리의 다른 글
프로그래머스 > 옹알이(1) - Python, re.sub() (2) | 2024.10.26 |
---|---|
프로그래머스 > 동적계획법(Dynamic Programming) > 정수 - JAVA (0) | 2023.06.01 |
코딩테스트 입문 > 가까운 수 - JAVA (0) | 2022.12.29 |
프로그래머스 > 코딩테스트 입문 > 소인수분해 - JAVA (0) | 2022.12.29 |
프로그래머스 > 코딩테스트 입문 > 최댓값 만들기 (2) - JAVA (0) | 2022.12.23 |