1. Problem Description
Given an array nums of integers, return how many of them contain an even number of digits.
주어진 정수의 배열 nums에서, 그것의 짝수자리의 숫자를 가진 숫자의 개수 반환해라.
link
Summary
주어진 배열에서 짝수자리의 숫자를 가진 수의 개수를 세는 문제.
example
Input: nums = [555,901,482,1771]
Output: 1
Explanation:
Only 1771 contains an even number of digits.
Constraints
1 <= nums.length <= 500
1 <= nums[i] <= 10^5
- 입력 배열의 길이는 1에서 500
- 요소의 크기(숫자의 자릿수)는 1에서 10^5(100,000)
2. Approach to the Problem
- for문으로 배열 nums을 순회하며 짝수자리의 숫자를 가진 숫자를 세는 방식입니다.
- 배열의 각 숫자의 자릿수는 len()을 사용 확인합니다. 이때 주어지는 요소 타입은 intger 이고 len()은 string의 길이를 세는 함수입니다. str()을 통해 타입 변환이 필요합니다.
- len(str(num))%2 을 통해 각 숫자의 자릿수가 짝수인지 확인하고 cnt를 갱신합니다.
3. Code and Explanation
class Solution:
def findNumbers(self, nums: List[int]) -> int:
cnt = 0
for i in nums:
if len(str(i))%2 == 0:
cnt =+ 1
return cnt
- cnt : 짝수 자리수를 가진 숫자의 개수 입니다.
- for i in nums: : 배열을 순회하며 숫자의 자릿 수를 확인합니다.
- if len(str(i))%2 == 0: : 숫자의 자릿수가 짝수인지 확인합니다.
4. Time and Space Complexity Analysis
Time Complexity
- N개의 숫자를 순회 (O(N))
- 숫자를 문자열로 변환 (O(K), K는 자릿수)
- len(str(i)) → 문자열 길이 구하기 (O(K), 보통 매우 작음)
- % 2 == 0 → O(1) 연산
Space Complexity
- cnt 변수 → O(1) (상수 공간)
- str(i) 변환 → 각 숫자를 문자열로 변환할 때 O(K) 메모리 사용, 하지만 한 번에 하나씩만 생성
✅ O(K)는 연산이 숫자의 자릿수(K)에 비례하여 실행된다는 의미입니다.
즉, 숫자의 크기에 따라 연산 시간이 증가하지만, 일반적으로 K는 매우 작은 값이므로 거의 O(1)처럼 동작합니다.
5. Alternative Approaches
nothing
6. Improvements
- len()은 string 자료형의 길이를 세는 함수입니다. integer 자료형에서 사용하는 경우 str()을 통해 변환이 필요합니다.
- cnt += 1 시 부호표기에 유의합니다. 잘못된 표기 cnt += 1
7. Conclusion
- 숫자가 짝수 자릿수인지 구분하는 것으로 해결이 가능합니다.