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

Python에서 사전순으로 가장 큰 산 목록을 찾는 프로그램

<시간/>

세 개의 양수가 n, lower 및 upper라고 가정합니다. 길이가 n이고 엄격하게 증가하고 엄격하게 감소하고 모든 숫자가 [하한 및 상한] 범위(둘 다 포함)에 있는 목록을 찾아야 합니다. 그리고 각각의 증가 및 감소 부분은 비어 있지 않아야 합니다. 사전순으로 가능한 가장 큰 목록을 찾아야 합니다. 이것이 불가능하면 빈 목록을 반환합니다.

따라서 입력이 n =5 lower =3 upper =7과 같으면 출력은 [6, 7, 6, 5, 4]가 됩니다. 자세히 보면 [7, 6, 5, 4, 3 ]은(는) 엄격하게 증가하는 부분이 비어 있지 않아야 하므로 유효하지 않습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n> 2 * (상단 - 하단) + 1이면

    • 빈 목록 반환

  • c :=위 - 아래

  • d :=1

  • c

    • d :=n - c - 1

  • d가 0과 같으면

    • d :=1

  • f :=(상단 - d)에서 (상단 - 1)까지의 새 목록

  • g :=범위(위쪽 - n + d - 1)에서 위쪽으로의 새 목록

  • f와 g를 연결하고 반환

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

def solve(n, lower, upper):
   if n > 2 * (upper - lower) + 1:
      return []
   c = upper - lower
   d = 1
   if c < n:
      d = n - c - 1
   if d == 0:
      d = 1
   f = list(range(upper - d, upper))
   g = list(range(upper, upper - n + d, -1))
   return f + g

n = 5
lower = 3
upper = 7
print(solve(n, lower, upper))

입력

5, 3, 7

출력

[6, 7, 6, 5, 4]