숫자 N이 있다고 가정하고 숫자에서 최소 자릿수(0 가능)를 제거하여 생성할 수 있는 가장 큰 완전 큐브를 결정해야 합니다. 목표에 도달하기 위해 주어진 숫자에서 숫자를 삭제할 수 있습니다. 우리가 알고 있듯이 어떤 정수 M에 대해 N =M^3인 경우 숫자 N을 완전 입방체라고 합니다.
따라서 입력이 806과 같으면 출력은 8이 됩니다. 숫자에서 0과 6을 삭제할 수 있으므로 8을 얻을 수 있습니다. 이것은 2의 완벽한 세제곱입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- preProcess() 함수를 정의합니다. n 소요됩니다.
- temp_cubes :=새 목록
- 범위 1에서 n^(1/3)의 상한까지의 i에 대해
- 큐브 =i^3
- cubeString :=큐브를 문자열로
- temp_cubes 끝에 cubeString 삽입
- temp_cubes 반환
- solve() 함수를 정의합니다. num,temp_cubes 가 걸립니다.
- 역 temp_cubes
- totalCubes :=temp_cubes의 크기
- 0~totalCubes 범위의 i에 대해
- temp :=temp_cubes[i]
- digitsInCube :=온도 크기
- 색인:=0
- digitsInNumber :=숫자의 크기
- 0~digitInNumber 범위의 j에 대해 다음을 수행합니다.
- num[j]가 temp[index]와 같으면
- 인덱스 :=인덱스 + 1
- digitInCube가 인덱스와 같으면
- 반환 온도
- num[j]가 temp[index]와 같으면
- "불가능" 반환
- 방법에서 다음을 수행하십시오 -
- temp_cubes :=preProcess(n)
- num :=n을 문자열로
- ans :=해결(num, temp_cubes)
- 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
import math def preProcess(n): temp_cubes = list() for i in range(1, math.ceil(n**(1. / 3.))): cube = i**3 cubeString = str(cube) temp_cubes.append(cubeString) return temp_cubes def solve(num,temp_cubes): temp_cubes = temp_cubes[::-1] totalCubes = len(temp_cubes) for i in range(totalCubes): temp = temp_cubes[i] digitsInCube = len(temp) index = 0 digitsInNumber = len(num) for j in range(digitsInNumber): if (num[j] == temp[index]): index += 1 if (digitsInCube == index): return temp return "Not Possible" def getLargestCube(n): temp_cubes = preProcess(n) num = str(n) ans = solve(num, temp_cubes) return ans n = 806 print(getLargestCube(n) )
입력
806
출력
8