- 원형으로 만들어진 초콜릿 조각 개를 의 간격으로 먹을 때, 먹을 수 있는 초콜릿 조각의 개수는? 단, 먹었던 조각으로 오면 멈춘다.
- 초콜릿 조각의 위치는 이고, 현재 조각의 위치를 라 하면, 다음 조각의 위치는 이다
- 일 때, 0, 4, 8, 2, 6의 조각을 먹을 수 있다.
시뮬레이션을 돌리면 일 것이므로 당연히 시간초과가 뜬다.
단순하게 이 의 배수라고 생각하자. 그러면 개의 조각을 먹을 수 있다.
만약 과 이 서로소 관계라고 하자. 그러면 개의 모든 조각을 먹을 수 있다.
그렇다면 라고 하자. 그러면 개의 조각을 먹을 수 있다.
이제 관계를 알았다. 배수, 서로소든 관계없이 개의 조각을 먹을 수 있다.
파이썬에 gcd()
키워드가 있는 것 같다. 그래서 getGCD()
를 새로 작성해서 만들었다.
시간복잡도는 getGCD()
만 영향을 미치므로 앞에서 보았듯이 이다.
def getGCD(a, b):
if a < b:
a, b = b, a
if a % b == 0:
return b
return getGCD(b, a % b)
def solution(N, M):
return N // getGCD(N, M)