백준 17087 파이썬 (숨바꼭질)

철웅·2022년 12월 3일
0

BOJ

목록 보기
21/46

문제 : 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의 "최댓값"을 구해야하므로 최대공약수를 구해야 한다.


💻 Code

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()로 사용하는게 더 빠름
    생각보다 파이썬은 대단하다.

0개의 댓글