본문 바로가기

알고리즘/백준 ~ 단계별 풀어보기

[다시 풀어보기] 백준 2981번 "검문"

Python 

from math import gcd
import sys

#전체적인 해법 + 인사이트
#https://pangsblog.tistory.com/62
n = int(sys.stdin.readline())
array = []
for _ in range(n):
    array.append(int(sys.stdin.readline().rstrip())) 
array.sort()
t = array[0]-array[1]
for i in range(1, len(array)):
    t = gcd(t, array[i]-array[i-1])

answer = []
answer.append(t)

# O(N^1/2)로 약수 구하기 
# https://minnit-develop.tistory.com/16 
for i in range(2, int(t**(1/2))+1):
    if t % i == 0: 
        answer.append(i)
        if ( (i**2) != t ) :
            answer.append( t // i)
answer.sort()
print(*answer)

참고

알고리즘 해법 + 인사이트: 

https://pangsblog.tistory.com/62

 

[백준 2981] - [수학 최대공약수] - 검문 (JAVA)

문제 링크 : https://www.acmicpc.net/problem/2981 이 문제는 정답률에서도 나오듯이 극악의 문제이다. 왜 극악이라 하냐면 쓸데없는데서 시간을 낭비 했기에 극악의 문제로 생각한다. 6 34 38 총 3개의 수

pangsblog.tistory.com

최소한의 시간복잡도로 약수 구하기:

https://minnit-develop.tistory.com/16

 

[Algorithm/Python] 파이썬 약수 구하기 (시간복잡도 줄여보기)

문제 1 이상의 자연수 N이 주어졌을 때, N의 약수 구하기 풀이 단순한 풀이 방법 def getMyDivisor(n): divisorsList = [] for i in range(1, n + 1): if (n % i == 0) : divisorsList.append(i) return divisorsL..

minnit-develop.tistory.com