Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 크기가 N인 링의 임의의 정수 점에서 A와 B까지의 거리의 최소 합 찾기


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