[SWEA] 세가지 합 구하기

문제 보러가기

제한사항

자연수 N의 범위는 (1 ≤ N ≤ 10^9) 이다.

첫번째 생각

자연수의 범위가 10^9 까지이므로, Long으로 계산해야한다.

모든 수를 직접 더하는 순간 시간초과가 나는 문제라고 생각해서,

S1을 구하는 공식( (1+N)*(N/2) )이고

S2는 S3 - N이다.

S3는 S1의 두배라는 공식을 도출해냈다.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for(int tc=1; tc<=T; tc++) {
			long N = sc.nextInt();
			long S1 = 0;
			S1 = (1+N)*(N/2);
			if ( N%2 == 1 ) { // 홀수라면 +1을 해주어야한다.
				S1 += N/2+1;
			}
			
			long res = S1*2;
			System.out.println("#"+tc+" "+S1+" "+(res-N)+" "+res);
		}
	}
}