[백준/Python]9613_GCD 합

2021. 6. 8. 13:01백준 알고리즘

문제

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

 

9613번: GCD 합

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

www.acmicpc.net

풀이

유클리드 호제법을 이용합니다.

유클리드 호제법은 a, b(a>b) 두 수가 있을 때, a와 b의 최대공약수 G는 b와 a%b의 최대공약수 G'과 같다는 알고리즘입니다.

코드

import sys
from itertools import combinations


def GCD(A: int, B: int) -> int:
    if B == 0:
        return A
    return GCD(B, A % B)


t = int(sys.stdin.readline().rstrip())
for _ in range(t):
    lst = list(map(int, sys.stdin.readline().rstrip().split()))
    n = lst[0]
    numbers = lst[1:]
    if n == 1:
        continue
    candidates = list(combinations(numbers, 2))
    result = 0
    for candidate in candidates:
        a, b = candidate
        if b > a:
            a, b = b, a
        temp = GCD(a, b)
        result += temp
    print(result)

'백준 알고리즘' 카테고리의 다른 글

[백준/Python]2512_예산  (0) 2021.06.10
[백준/Python]2206_벽 부수고 이동하기  (0) 2021.06.08
[백준/Python]1890_점프  (0) 2021.06.07
[백준/Python]2630_색종이 만들기  (0) 2021.06.07
[백준/Python]1004_어린 왕자  (0) 2021.06.05