https://www.acmicpc.net/problem/9613
from itertools import combinations
def gcd(a, b):
return a if b == 0 else gcd(b, a%b)
def sum_gcd(lst):
length = lst[0]
numbers = lst[1:]
if length == 1:
return numbers[0]
elif length == 2:
return gcd(numbers[0], numbers[1])
else:
comb = combinations(numbers, 2)
comb = list(comb)
ans = 0
for i in range(len(comb)):
tmp_gcd = gcd(comb[i][0], comb[i][1])
ans += tmp_gcd
return ans
for _ in range(int(input())):
lst = list(map(int, input().split()))
print(sum_gcd(lst))
유클리드 호제법으로 푸는 방법입니다.
- 만약 받은 list의 길이가 1일 경우 그대로 반환
- 2일 경우 두 개의 숫자의 gcd 반환
- 3 이상이면 2개씩 combination을 구한 뒤 각 combination의 gcd를 구해 더하는 방식으로 풀기
'Algorithm' 카테고리의 다른 글
[파이썬] 백준 1292번: 쉽게 푸는 문제 (0) | 2023.11.05 |
---|---|
[파이썬] 백준 1316번: 그룹 단어 체커 (0) | 2023.11.03 |
[파이썬] 백준 1316번: 그룹 단어 체커 (0) | 2023.09.15 |
[파이썬] Codility - Lesson 3 Time Complexity: TapeEquilibrium (0) | 2021.07.28 |
[파이썬] Codility - Lesson 3 Time Complexity: PermMissingElem (0) | 2021.07.24 |