[Programmers] Lv0 연속된 수의 합 JAVA
2023. 1. 18. 22:19ㆍCS/자료구조 & 알고리즘
728x90
문제 출처
[프로그래머스 코딩 테스트 연습]
https://school.programmers.co.kr/learn/courses/30/lessons/120923
문제 풀이
이 문제는 수학을 이용하여 첫 번째 숫자를 구할 수 있다.
첫 번째 숫자를 구한 후 1씩 더하는 배열을 만들면 된다.
첫 번째 숫자 구하는 방법
1. num이 5, total이 5라고 가정을 하면
total = n + 0 + n + 1 + n + 2 + n + 3 + n + 4로 나타낼 수 있다.
2. n이 5개이므로 5n으로 나타내면 다음과 같다.
total = 5*n + 0 + 1 + 2 + 3+ 4
3. 5*n 이후를 0부터 4까지의 더하기로 볼 수 있다.
total = 5*n + 4*(4+1)/2
4. 5와 4를 num으로 치환이 가능하다.
total = num*n + (num-1) * (num - 1 + 1) / 2
5. 4 번식을 간단하게 가능하다.
total = num*n + (num-1) * (num) / 2
6. n에 대한 식으로 변환이 가능하다.
n = {total - (num-1)*num/2} / num
7. 6번식을 간단하게 변환이 가능하다.
n = total / num - (num-1) / 2
소스 코드
public class Solution {
public int[] solution(int num, int total) {
int n = total/num - (num - 1)/2;
int[] answer = new int[num];
for (int i = 0; i < num; i++)
answer[i] = n + i;
return answer;
}
}
728x90
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
[Programmers] Lv0 잘라서 배열로 저장하기 JAVA (0) | 2023.01.20 |
---|---|
[Programmers] Lv0 문자열 밀기 JAVA (0) | 2023.01.19 |
[Programmers] Lv0 종이 자르기 JAVA (0) | 2023.01.18 |
[Programmers] Lv0 다음에 올 숫자 JAVA (0) | 2023.01.18 |
[Programmers] Lv0 옹알이(1)(2) JAVA (0) | 2023.01.17 |