1에서 N까지의 소수의 숫자로 구성된 고리가 있다고 가정합니다. 또한 견인 번호 A와 B도 있습니다. 이제 우리는 어떤 위치(예:x)에 설 수 있습니다. 거리의 총합에 대해 카운트 연산을 수행합니다(Z =X에서 A까지의 거리 + X에서 B까지의 거리). Z가 최소화되도록 X를 선택해야 합니다. 마지막에 Z 값을 반환합니다. X는 A 및 B와 같지 않다는 점을 명심해야 합니다.
따라서 입력이 N =30, A =10, B =20인 경우 출력은 X =15, X에서 A까지의 거리는 5, X에서 B는 5입니다. 따라서 총 거리 =5 + 5 =10입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
a> b가 0이 아니면
-
스왑 및 b
-
-
clock_wise_dist :=b - a
-
counter_clock_wise_dist :=(a - 1) +(n - b + 1)
-
minimum_dist :=clock_wise_dist, counter_clock_wise_dist의 최소값
-
minimum_dist가 1과 같으면
-
3을 반환
-
-
minimum_dist 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def get_min_z(n, a, b): if (a > b): a, b = b, a clock_wise_dist = b - a counter_clock_wise_dist = (a - 1) + (n - b + 1) minimum_dist = min(clock_wise_dist, counter_clock_wise_dist) if (minimum_dist == 1): return 3 return minimum_dist n = 30 a = 10 b = 20 print(get_min_z(n, a, b))
입력
30, 10, 20
출력
10