코딩

[BOJ] 백준 2981 검문 Python

척척석사아님 2023. 10. 27. 11:33
728x90
#2981 검문

import sys
import math

input = sys.stdin.readline
N = int(input())
A = []
for i in range (0,N):
    a = int(input())
    A.append(a)

A = list(set(A))
B = []
 
for i in range (0,len(A)-1):
    for j in range (i+1,len(A)):
        b = A[j] - A[i]
        B.append(b)

gcd = B[0]
for i in range (1,len(B)):
    gcd = math.gcd(gcd,B[i])

gcd = math.fabs(gcd)
result = []
for i in range (1,int(math.sqrt(gcd))+1):
    if gcd % i == 0:
        result.append(i)
        c = int(gcd // i)
        result.append(c)
    else:
        continue
result = list(set(result)) 
result.remove(1)
result.sort()

s = " ".join(str(t) for t in result)
print(s)

이전 포스팅과 크게 다른 것이 없었던 문제인데,
이 문제는 gcd의 약수까지 전부 구해달라고 하는것이 하나의 함정.

 

코딩을 하면서 런타임에러 (ValueError)가 자주 떴는데,
그 이유는 gcd의 값이 음수가 나오면서 for i in range (1,-----) 의 부분에서 math.sqrt(gcd)에서 에러가 떴는데, gcd에 절댓값을 취하게 해줌으로서 해결 가능.


시간은 52ms로 아주 나이스하게.