nums.
Return the smallest index i such that the sum of the digits of nums[i] is equal to i.
If no such index exists, return -1.
Example 1:
Output: 2
Explanation:
nums[2] = 2, the sum of digits is 2, which is equal to index i = 2. Thus, the output is 2.Example 2:
Output: 1
Explanation:
nums[1] = 10, the sum of digits is 1 + 0 = 1, which is equal to index i = 1.nums[2] = 11, the sum of digits is 1 + 1 = 2, which is equal to index i = 2.Example 3:
Output: -1
Explanation:
Constraints:
1 <= nums.length <= 1000 <= nums[i] <= 1000배열, 수학
주어진 정수 배열 nums에서 **인덱스 i**와 해당 인덱스의 값 nums[i]의 각 자릿수 합이 같은 가장 작은 인덱스 i를 찾는 문제입니다.
만약 조건을 만족하는 인덱스가 없다면 -1을 반환합니다.
nums (길이 1 ~ 100, 원소 값 0 ~ 1000)i (정수), 없으면 -1이 문제는 완전 탐색(Brute Force) 방식으로 해결할 수 있습니다.
배열의 길이가 최대 100이고, 각 숫자도 최대 1000(최대 4자리)이므로 모든 인덱스를 순회하며 자릿수 합을 계산해도 연산량이 매우 적습니다(최대 100 * 4 = 400회 연산).
알고리즘 흐름:
i와 값 num을 함께 순회합니다(enumerate 사용).num의 각 자릿수 합을 계산합니다.i와 같으면 즉시 i를 반환합니다(가장 작은 인덱스부터 순회하므로 처음 발견된 것이 정답).-1을 반환합니다.enumerate(nums)를 사용하여 배열의 인덱스 i와 원소 num을 동시에 가져옵니다.num을 문자열로 변환(str(num))한 뒤, 각 문자(자릿수)를 순회하며 정수로 변환해 누적합(total)을 구합니다.num = 10 → "10" → '1', '0' → 1 + 0 = 1total)과 현재 인덱스(i)를 비교합니다.return i를 수행하여 함수를 종료합니다. 더 이상 뒤의 인덱스를 볼 필요가 없습니다.for 루프가 끝까지 돌았는데 return되지 않았다면 조건을 만족하는 인덱스가 없는 것입니다.return -1을 실행합니다.시간 복잡도: O(N * D)
N: 배열의 길이 (최대 100)D: 숫자의 최대 자릿수 (최대 4, nums[i] <= 1000)N * D번 연산합니다. 제약 조건상 최대 400회로 매우 빠릅니다.공간 복잡도: O(1)
total과 루프 변수 외에 추가적인 자료구조를 사용하지 않습니다.num % 10, num // 10을 써도 됨)class Solution:
def smallestIndex(self, nums: List[int]) -> int:
for i,num in enumerate(nums):
total = 0
for x in str(num):
total += int(x)
if i == total:
return i
return -1