백준 9613 (GCD 합)

soss·2022년 11월 18일
0
post-thumbnail

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개의 수를 의미하는 배열의 첫번째 인덱스가 최대공약수를 구할 수들보다 무조건 작을 거라고 생각한 걸 알게 되었다. 해당 코드들을 고치고 제출하니 정답이 출력되었다.

알게된 점

유클리드 호제법을 이용해 최소공배수 구하는 문제를 얼마 전에 풀었는데 그새 까먹어서 벨로그에서 찾아봤다. 한 번 배운 건 최대한 까먹지 않도록 확실하게 학습해두어야겠다.

profile
안녕하세요. 복습 목적으로 문제 풀이를 올리고 있습니다.

0개의 댓글