BOJ 9613 GCD 합
- 문제 링크
https://www.acmicpc.net/problem/9613
- 문제 해설
3중 for문을 이용하여 풀었다. 시간복잡도가 O(N^2xT)인데, 최대 연산 수가 100x100x100 = 1,000,000 이므로 제한 시간 1초 안에 충분히 가능하다.
최대공약수는 두 수를 입력 받으면 최대공약수를 반환하는 gcd 함수를 유클리드 호제법을 이용하여 만들어 해결했다.
그리고 테스트 케이스마다 주어지는 수들을 다 순회하면서 gcd 함수를 실행하고 그 값을 sum에 더해주어 문제를 해결했다.
- 코드 보기
import java.io.*; import java.util.*; public class Main { public static long gcd(int x, int y) { if (y == 0) return x; else return gcd(y, x % y); } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); StringBuilder sb = new StringBuilder(); int t = Integer.parseInt(st.nextToken()); for (int i = 0; i < t; i++) { st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int[] arr = new int[n]; long sum = 0; for (int j = 0; j < n; j++) { arr[j] = Integer.parseInt(st.nextToken()); } for (int a = 0; a < n; a++) { for (int b = a + 1; b < n; b++) sum += gcd(arr[a], arr[b]); } sb.append(sum + "\n"); } bw.write(sb.toString()); br.close(); bw.flush(); bw.close(); } }
'PS > BOJ' 카테고리의 다른 글
BOJ 2745 진법 변환 [Java] (0) | 2021.08.01 |
---|---|
BOJ 11005 진법 변환 2 [Java] (0) | 2021.07.27 |
BOJ 1850 최대공약수 [Java] (0) | 2021.07.26 |
BOJ 2609 최대공약수와 최소공배수 [Java] (0) | 2021.07.26 |
BOJ 2003 수들의 합 2 [Java] (0) | 2021.07.24 |