https://www.acmicpc.net/problem/17087
17087번: 숨바꼭질 6
수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이
www.acmicpc.net
import sys
def get_gcd(num1, num2):
while num2 != 0:
r = num1 % num2
num1 = num2
num2 = r
return num1
_, S = map(int, input().split())
arr = list(map(int, sys.stdin.readline().split()))
arr = set(map(lambda item: abs(item-S), arr))
d = min(arr)
for i in arr:
d = get_gcd(i, d)
print(d)
이 문제의 핵심은 여러 수들의 최대 공약수를 구하는 것이다.
처음엔 조합(combinations)을 이용해서 두 개의 수를 뽑아 최대 공약수를 구한 다음에 뽑아낸 최대공약수 중 제일 작은 걸 고르는 방법을 생각했다. 시간초과가 나왔다.
여러 수들의 최대 공약수를 구할땐 아래와 같은 방법을 이용하자.
- 여러 수들 중 가장 작은 수와 임의의 수의 최대 공약수를 구한 뒤 저장한다.
- 구한 최대 공약수와 임의의 수의 최대 공약수를 구해서 덮어쓰기 한다.
- 2번을 반복한다.
그럼 자동으로 최대 공약수들 중 제일 작은 최대 공약수가 구해진다.
'알고리즘 > 백준-파이썬' 카테고리의 다른 글
[백준] 1212번 (python 파이썬) (0) | 2022.04.12 |
---|---|
[백준] 1373번 (python 파이썬) (0) | 2022.04.12 |
[백준] 9613번 (python 파이썬) (0) | 2022.04.12 |
[백준] 2004번 (python 파이썬) (0) | 2022.04.12 |
[백준] 1676번 (python 파이썬) (0) | 2022.04.12 |