https://www.acmicpc.net/problem/5618
#시간초과 풀이
n = int(input())
num = list(map(int, input().split()))
for i in range(1,min(num)+1):
cnt = 0
for j in num:
if j % i == 0:
cnt += 1
if cnt == n:
print(i)
#맞는 풀이
import math
n = int(input())
num = list(map(int, input().split()))
min_num = math.gcd(num[0], math.gcd(num[1], num[-1]))
for i in range(1,min_num//2 +1):
if min_num % i == 0:
print(i)
print(min_num)
처음엔 시간초과가 떠서 방법을 바꿨다.
gcd를 이용해서 최대공약수를 구한 후, 최대공약수의 약수를 출력하도록 했다.
루프의 범위를 min_num//2+1로 한 이유는 min_num이면 시간초과가 뜬다. 그러므로 나누기 2를 했다.