728x90
#17087 https://www.acmicpc.net/problem/17087
17087번: 숨바꼭질 6
수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이
www.acmicpc.net
최소공약수가 필요한 문제인데, 난 여태 최소공약수 연산을 다음처럼 했었다.
def get_gcd(num1, num2):
for i in range(max(num1, num2), 0, -1):
if num1%i == 0 and num2%i == 0:
return i
공약수를 구하는 상황인 만큼 두 수의 약수가 아닌 수까지 loop를 돌리는 위 코드는 무조건 시간초과가 날 수 밖에 없었다.
그렇게 얻은 솔루션은 다음과 같다.
def get_gcd_efficiently(num1, num2):
if num1 > num2:
m, n = num1, num2
else:
m, n = num2, num1
while n:
mod = n
n = m%n
m = mod
return m
어떤 원리인지는 잘 모르겠지만 아주 효율적인 코드이다.
'Algorithm > acmicpc.net' 카테고리의 다른 글
다이나믹 프로그래밍 (Dynamic Programming) (0) | 2021.12.08 |
---|---|
진수 계산법 (0) | 2021.12.04 |
0의 개수 (0) | 2021.11.30 |
익숙해지기 참 어려운 소수 (0) | 2021.11.28 |
EOFerror : 입력이 끝날 때 종료를 원한다면!.. (0) | 2021.11.25 |