https://www.acmicpc.net/problem/9613
n = int(input())
sum_gcdList = []
def gcd(a, b):
if a % b == 0:
return b
else:
return gcd(b, a % b)
for _ in range(n):
n_list = list(map(int, input().split()))
del n_list[0]
n_list.sort(reverse = True)
sum_gcd = 0
for i in range(len(n_list)):
for j in range(len(n_list)):
if i > j:
sum_gcd += gcd(n_list[i], n_list[j])
sum_gcdList.append(sum_gcd)
for i in sum_gcdList:
print(i)
처음에는 13번째 줄 'del n_list[0]'을 적지 않고 16번째, 17번째 줄에 range(len(n_list)-1) 와 같이 적었다. 오답으로 나와서 왜 그런가 곰곰히 생각해보다가 여러 개의 테스트 케이스를 적어보던 중에 입력받게 될 n개의 수를 의미하는 배열의 첫번째 인덱스가 최대공약수를 구할 수들보다 무조건 작을 거라고 생각한 걸 알게 되었다. 해당 코드들을 고치고 제출하니 정답이 출력되었다.
유클리드 호제법을 이용해 최소공배수 구하는 문제를 얼마 전에 풀었는데 그새 까먹어서 벨로그에서 찾아봤다. 한 번 배운 건 최대한 까먹지 않도록 확실하게 학습해두어야겠다.