숫자로 이루어진 리스트 nums가 주어졌을 때, 자신의 값과 출현 빈도가 정확히 같은 요소가 존재하는지 확인해야 하는 문제입니다.
예를 들어 입력이 nums = [2,5,7,5,3,5,3,5,9,9,5]라고 한다면 결과는 True가 됩니다. 숫자 5가 리스트 안에 정확히 5번 등장하기 때문입니다.
문제 해결 접근 방법
이 문제는 다음 단계를 따라 해결할 수 있습니다.
nums에 포함된 각 요소의 빈도를 계산하여 저장합니다.각 값
i와 해당 빈도j를 하나씩 순회합니다.i와j가 같다면 즉시True를 반환합니다.모든 요소를 확인한 후에도 일치하는 항목이 없다면
False를 반환합니다.
예제 코드
아래 구현 예시를 통해 더 잘 이해할 수 있습니다. 파이썬의 collections.Counter를 사용하면 각 요소의 빈도를 손쉽게 계산할 수 있습니다.
from collections import Counter
def solve(nums):
nums_c = Counter(nums)
for i, j in nums_c.items():
if i == j:
return True
return False
nums = [2,5,7,5,3,5,3,5,9,9,5]
print(solve(nums))입력
[2,5,7,5,3,5,3,5,9,9,5]
출력
True
코드 설명
Counter(nums)는 리스트 내 각 숫자가 몇 번 나타나는지 딕셔너리 형태로 저장합니다. 위 예제에서는 {2:1, 5:5, 7:1, 3:2, 9:2}와 같은 형태가 됩니다. 이후 items() 메서드로 값과 빈도 쌍을 순회하며 두 값이 일치하는지 검사하고, 조건을 만족하는 순간 True를 반환하므로 불필요한 반복을 줄일 수 있습니다. 이 알고리즘의 시간 복잡도는 O(n)으로 효율적입니다.