
문제의 포인트는 자료형
시간 복잡도 계산 : n번의 루프안에 n(n-1)/2
최악의 경우 100 * 100* 99 /2 = 49500번의 루프를 돈다
문제는 출력되는 GCD합의 범위
n(n-1)/2 * 입력되는 수의 최대값 1,000,000-1 (그냥 백만으로 계산)
100 * 99 /2 * 1,000,000 = 49억
int형은 +-21억 으로
long 으로 선언해야된다.
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
int loop = Integer.parseInt(reader.readLine());
for(int i=0; i<loop ; i++) {
String[] input = reader.readLine().split(" ");
int[] arr = new int[input.length-1];
int loopCnt = Integer.parseInt(input[0]);
// 숫자배열로 변
for(int k=1; k<input.length; k++){
arr[k-1] = Integer.parseInt(input[k]);
}
long ans = 0;
for(int j=0; j<loopCnt-1; j++) {
for (int k=j+1; k<loopCnt; k++) {
int big = Math.max(arr[j], arr[k]);
int small = Math.min(arr[j], arr[k]);
ans += getGcd(big, small);
}
}
writer.append(String.valueOf(ans));
writer.append("\n");
}
reader.close();
writer.flush();
}
public static int getGcd(int first, int second) {
int remain = first %second;
// 재귀
if(remain!=0) {
return getGcd(second, remain);
}else {
return second;
}
}
}
'PROGRAMMING > ALGORITHM' 카테고리의 다른 글
| [백준] 17103번 골드바흐 파티션 JAVA (0) | 2021.04.29 |
|---|---|
| [백준] 17087번 숨박꼭질 6 JAVA (0) | 2021.04.27 |
| [기초] 최소공배수 GCD & 최대공약수 LCM JAVA (0) | 2021.04.25 |
| [백준] 1676번 팩토리얼 0의 개수 JAVA (0) | 2021.04.24 |
| [백준] 10872번 팩토리얼 JAVA (0) | 2021.04.23 |