코딩테스트/BOJ

[BOJ] 9613 GCD 합 - JAVA

5월._. 2022. 7. 11.
728x90

1. 문제

 

9613번: GCD 합

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

www.acmicpc.net

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


2. 풀이

1.  숫자를 전부 입력받은 뒤 각 쌍마다 gcd를 구해서 sum에 더하면 된다. 이 때, sum의 최대값은 1000000*100이므로 long타입이어야 한다.

2.  gcd(a,b)==gcd(b,a%b) 다. 만약 a%b가 0이라면 gcd(a,b)는 b다. 이 공식을 함수로 만들었다.

import java.io.*;
import java.util.*;

public class BOJ_9613_GCD합 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      int T = Integer.parseInt(in.readLine());
      StringBuilder sb = new StringBuilder();
      StringTokenizer st;
      int N;
      int[] input;
      long sum;
      for(int tc=0;tc<T;tc++){
         st = new StringTokenizer(in.readLine());
         N = Integer.parseInt(st.nextToken());
         input = new int[N];
         for(int i=0;i<N;i++){
            input[i] = Integer.parseInt(st.nextToken());
         }
         sum = 0;
         for(int i=0;i<N-1;i++){
            for(int j=i+1;j<N;j++){
               sum += gcd(input[i], input[j]);
            }
         }
         sb.append(sum).append('\n');
      }
      System.out.print(sb);
   }
   private static int gcd(int a, int b){
      if(a%b==0) return b;
      return gcd(b,a%b);
   }
}

3. 결과

sum 타입때문에 한 번 틀렸다.

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 1676 팩토리얼 0의 개수 - JAVA  (0) 2022.07.13
[BOJ] 1439 뒤집기 - JAVA  (0) 2022.07.12
[BOJ] 2512 예산 - JAVA  (0) 2022.07.10
[BOJ] 9375 패션왕 신해빈 - JAVA  (0) 2022.07.09
[BOJ] 1476 날짜 계산 - JAVA  (0) 2022.07.08

댓글