진취적 삶
숨바꼭질 6 본문
문제
수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다.
수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다.
모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.
입력
첫째 줄에 N(1 ≤ N ≤ 105)과 S(1 ≤ S ≤ 109)가 주어진다. 둘째 줄에 동생의 위치 Ai(1 ≤ Ai ≤ 109)가 주어진다. 동생의 위치는 모두 다르며, 수빈이의 위치와 같지 않다.
출력
가능한 D값의 최댓값을 출력한다.
나의 풀이
import math
n, x = map(int, input().split())
brother_position = list(map(int, input().split()))
brother_position.sort()
for i, v in enumerate(brother_position):
if v > x:
brother_position.insert(i, x)
break
position_gcd = []
for i in range(len(brother_position) - 1):
position_gcd.append(abs(brother_position[i + 1] - brother_position[i]))
gcd_get = position_gcd[0]
for i in position_gcd:
gcd_get = math.gcd(gcd_get, i)
print(gcd_get)
수빈이 값을 넣고 sort 해서 최대공약수를 구했으나 88%에서 틀림
모범답안
import math
n, x = map(int, input().split())
brother_position = list(map(int, input().split()))
position_gcd = []
for i in range(n):
position_gcd.append(abs(brother_position[i] - x))
gcd_get = position_gcd[0]
for i in position_gcd:
gcd_get = math.gcd(gcd_get, i)
print(gcd_get)
insert 대신 수빈이와 동생의 거리의 값을 절대값으로 append