[백준] #2981 검문 python
2023. 1. 1. 19:18
https://www.acmicpc.net/problem/2981
2981번: 검문
트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간
www.acmicpc.net
📕 설명 📕
시간 복잡도를 고려해야하는 문제이다.
먼저, 수학적 접근이 가장 필요하다.
M은 다른 수들 중 두 값을 뺀 값의 최대공약수이기 때문에 뺀 값의 최대 공약수를 구한다면 쉽게 구할 수 있다.
그리고, 공약수를 구할 때, 나눈 나머지 값이랑 몫 둘 다 공약수가 되기 때문에 이 둘을 다 고려해주면 복잡도를 대폭 낮출 수 있다.
🧑🏻💻 나의 풀이 🧑🏻💻
import math
N = int(input())
tmp_list = []
for i in range(N):
tmp_list.append(int(input()))
tmp_list.sort()
interval_list = []
result_list = []
for i in range(1, N):
interval_list.append(tmp_list[i] - tmp_list[i-1])
prev = interval_list[0]
for i in range(1, len(interval_list)):
prev = math.gcd(prev, interval_list[i])
for i in range(2, int(math.sqrt(prev)) + 1):
if prev % i == 0:
result_list.append(i)
result_list.append(prev//i)
result_list.append(prev)
result_list = list(set(result_list))
result_list.sort()
print(*result_list)
'Programming > Algorithm' 카테고리의 다른 글
[백준] #11050 이항 계수 1 python (0) | 2023.01.02 |
---|---|
[백준] #3036 링 python (0) | 2023.01.02 |
[백준] #1934 최소공배수 python (0) | 2023.01.01 |
[백준] #2609 최대공약수와 최소공배수 python (0) | 2023.01.01 |
[백준] #1037 약수 python (0) | 2022.12.31 |