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

파이썬에서 모든 숫자가 감소하지 않는 n보다 크지 않은 숫자를 찾는 프로그램

<시간/>

숫자 n이 있다고 가정하고 모든 숫자가 감소하지 않는 n보다 작거나 같은 가장 큰 숫자를 찾아야 합니다.

따라서 입력이 n =221과 같으면 출력은 199가 됩니다.

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

  • digits :=n의 모든 숫자가 포함된 목록
  • 바운드:=null
  • 숫자 범위 크기의 i에 대해 - 1에서 0까지, 수행
    • 숫자[i] <숫자[i - 1]이면
      • 바운드 :=나
      • 숫자[i - 1] :=숫자[i - 1] - 1
    • bound가 null이 아니면
      • 숫자 크기에 묶인 범위의 i에 대해
        • 숫자[i] :=9
  • 각 숫자를 숫자로 결합하여 숫자를 만들고 반환

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

예시 코드

class Solution:
   def solve(self, n):
      digits = [int(x) for x in str(n)]
      bound = None
      for i in range(len(digits) - 1, 0, -1):
         if digits[i] < digits[i - 1]:
            bound = i
            digits[i - 1] -= 1
         if bound:
            for i in range(bound, len(digits)):
               digits[i] = 9
         return int("".join(map(str, digits)))

ob = Solution()
n = 221
print(ob.solve(n))

입력

221

출력

199