Algorithm/Python

[백준 9613] GCD 합

🥭맹2 2021. 5. 2. 22:37

1. 문제

www.acmicpc.net/problem/9613

 

9613번: GCD 합

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

www.acmicpc.net

2. 접근 방법

라이브러리를 쓰지 않고 시도해봐따

 

GCD(최대공약수)는 math를 쓰지 않고 유클리드 호제법을 사용하려고 했는데

기억이 나지 않아서 서치했따 !

 

brownbears.tistory.com/454

이 분이 가장 쉽게? 설명했다고 생각합니다요

 

여튼 유클리드 호제법은

x, y의 최대공약수를 구할 때

1. x % y == 0 --> gcd(x, y) = y

2. x % y != 0 --> gcd(x, y) = gcd(x, x%y)

3. x%y==0이 될 때까지 2를 반복

3. 코드

python

def GCD(lst):
    a, b = lst
    while b:
        a, b = b, a % b
    return a

def comb(cnt, N, start):
    global answer, sum_answer
    if cnt == N:
        sum_answer += GCD(answer)
        return
    else:
        for i in range(start, len(lst)):
            answer.append(lst[i])
            comb(cnt+1, N, i+1)
            answer.pop()

N = int(input())
for _ in range(N):
    lst = list(map(int, input().split()))
    lst.pop(0)
    answer = []
    sum_answer = 0
    comb(0, 2, 0)
    print(sum_answer)

4. 마치며

오랜만에 수학문제였습니다요

'Algorithm > Python' 카테고리의 다른 글

[백준 2309] 일곱 난쟁이  (0) 2021.05.03
[백준 6588] 골드바흐의 추측  (0) 2021.05.03
[스택/큐] 다리를 지나는 트럭  (0) 2021.05.02
[해시] 베스트앨범  (0) 2021.05.01
[해시] 위장  (0) 2021.05.01