양의 정수로 이루어진 리스트 nums가 주어졌을 때, 자릿수가 홀수인 요소의 개수를 구하는 문제입니다.
예를 들어 입력이 [1, 300, 12, 10, 3, 51236, 1245]라면 결과는 4가 됩니다. 각 숫자의 자릿수를 살펴보면 다음과 같습니다.
- 1 → 1자리 (홀수) ✔
- 300 → 3자리 (홀수) ✔
- 12 → 2자리 (짝수)
- 10 → 2자리 (짝수)
- 3 → 1자리 (홀수) ✔
- 51236 → 5자리 (홀수) ✔
- 1245 → 4자리 (짝수)
따라서 자릿수가 홀수인 요소는 1, 300, 3, 51236의 총 4개입니다.
해결 접근 방법
이 문제는 다음 단계에 따라 해결할 수 있습니다.
- 카운터 변수 c를 0으로 초기화합니다.
- i를 0부터 nums의 길이까지 반복하면서 다음을 수행합니다.
- s := nums[i]의 자릿수 (숫자를 문자열로 변환한 뒤 길이를 구하면 됩니다)
- s가 홀수라면 c := c + 1
- 반복이 끝나면 c를 반환합니다.
예제 코드
아래 구현을 통해 더 잘 이해해 보겠습니다.
class Solution:
def solve(self, nums):
c = 0
for i in range(len(nums)):
s = len(str(nums[i]))
if s % 2 != 0:
c = c + 1
return c
ob = Solution()
print(ob.solve([1, 300, 12, 10, 3, 51236, 1245]))
입력
[1, 300, 12, 10, 3, 51236, 1245]
출력
4
코드 설명
핵심 아이디어는 len(str(nums[i])) 부분입니다. 숫자를 문자열로 변환하면 len() 함수를 사용해 손쉽게 자릿수를 구할 수 있습니다. 이후 나머지 연산자 %를 활용해 자릿수가 2로 나누어떨어지지 않는 경우(홀수)만 카운트하면 됩니다.
이 방법은 시간 복잡도 O(n × d)(n은 리스트 길이, d는 평균 자릿수)로 효율적이며, 코드도 간결해서 초보자에게 적합한 연습 문제입니다.