본문으로 바로가기

백준 9613번 GCD합 java

category Algorithm by java 2019. 9. 17. 15:15

문제

양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진다. 입력으로 주어지는 수는 1000000을 넘지 않는다.

출력

각 테스트 케이스마다 가능한 모든 쌍의 GCD의 합을 출력한다.

 

 

각 쌍마다 최대공약수를 구해서 합을 구하는 단순한 문제

(브루트포스+GCD)

 

*답을 출력할 변수를 long형으로 선언해야함을 주의하자. (정답률 낮은 이유)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 https://www.acmicpc.net/problem/9613

 

9613번: GCD 합

문제 양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진다. 입력으로 주어지는 수는 1000000을 넘지 않는다. 출력 각 테스트 케이스마다 가능한 모든 쌍의 GCD의 합을 출력한다. 예제 입

www.acmicpc.net

 

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	static int GCD(int n1, int n2) {
		if (n2 == 0) {
			return n1;
		} else {
			return GCD(n2, n1 % n2);
		}
	}

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		ArrayList list = new ArrayList<>();

		int testCase = sc.nextInt();

		for (int i = 0; i < testCase; i++) {
			int n = sc.nextInt();

			list.clear();
			for (int j = 0; j < n; j++) {// 두번째 테스트케이스
				list.add(sc.nextInt()); // 숫자 넣어주기
			}
			long ans = 0;

			for (int x = 0; x < list.size() - 1; x++) {
				for (int c = x + 1; c < list.size(); c++) {
					ans += GCD(list.get(x), list.get(c));

				}
			}

			System.out.println(ans);
		}

	}

}

'Algorithm by java' 카테고리의 다른 글

백준 17298번 오큰수 java  (0) 2019.09.19
백준 17087 숨바꼭질 6 java  (0) 2019.09.17
백준 10799번 쇠막대기 java  (0) 2019.09.11
백준 1966번 프린터 큐 java  (0) 2019.09.08
백준 17413번 단어뒤집기 2 java  (2) 2019.09.08