[Programmers] Lv0 연속된 수의 합 JAVA

2023. 1. 18. 22:19CS/자료구조 & 알고리즘

728x90

문제 출처

[프로그래머스 코딩 테스트 연습]

https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

이 문제는 수학을 이용하여 첫 번째 숫자를 구할 수 있다.

첫 번째 숫자를 구한 후 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