문제 : https://www.acmicpc.net/problem/17087
문제의 첫 번째 테스트 케이스로 보았을 때 (S:3, A: 1, 7, 11)
1.S
(3)와 가장 가까운A
를 찾기 -> 1
2. 그 두 값의 차이에 절대값을 씌우면 가장 가까운 동생과의 거리가 나온다.import sys input = sys.stdin.readline ㅤ N, S = map(int, input().split()) A = list(map(int, input().split())) distance = [] ㅤ for i in A: distance.append(abs(i-S)) ㅤ print(min(distance))
하지만 오답
문제의 테스트 케이스들은 전부 동생과의 거리가 최소 거리의 배수로 딱딱 떨어지게 나와있어서 테스트 케이스들만 맞았던 것
-> 포인트는 "모든" 동생들에게 도달해야는D
의 "최댓값"을 구해야하므로 최대공약수를 구해야 한다.
import sys
input = sys.stdin.readline
def gcd(a,b):
if b == 0 :
return a
else:
return gcd(b, a%b)
N, S = map(int, input().split())
A = list(map(int, input().split()))
distance = []
for i in A:
distance.append(abs(i-S))
ans = distance[0]
for i in range(1,len(distance)):
ans = gcd(ans, distance[i])
print(ans)
import math
하고 math.gcd()
로 사용하는게 더 빠름