백준 2981 검문 (Python,Pypy)

Joowan Park·2023년 7월 30일
0

코딩

목록 보기
13/28
post-custom-banner
#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로 아주 나이스하게.

profile
Complex Dynamics에서 탈출한 원숭이
post-custom-banner

0개의 댓글