세 개의 양수가 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]