10807번 - 개수 세기

의혁·2025년 1월 17일
0

[Algorithm] 알고리즘

목록 보기
16/50

💡 list.count()와 collections의 counter를 비교하여 보자

< 정답 코드 >

N = int(input())

num = list(map(int,input().split(' ')))

v = int(input())

print(num.count(v))
  • 비교적 너무 쉬운 문제였고, 그저 count()를 사용해서 내가 원하는 숫자가 리스트 내에 몇개가 있는지만 출력해보면 되는 문제였다.

< 서현님의 코드 >

from sys import stdin as s
from collections import Counter

N = int(s.readline())

A = list(map(int, s.readline().split()))

X = int(s.readline())

cnt = Counter(A)
print(cnt[X])
  • 풀이를 마치고, 팀원들을 코드를 둘러보던 중, Collections의 Counter를 사용하신 코드를 보게 되었고, 문득 count()와 counter의 성능차이가 궁금하였다.

💡 list.count() vs Counter(list)

1. 사용 방법 및 원리

from collections import Counter

list = [1, 1, 2, 3, 3]

# list의 count()는 내장함수 이기 떄문에 아무런 선언 없이 사용 가능
# 2
list.count(1)

# Collections의 counter는 import가 필요
# ({1:2, 2:1, 3:2})
result =  Counter(list)
  • count()는 내장함수여서 별도의 Import가 필요없지만, Counter는 필요
  • count()는 해당 개수가 출력되고, Counter는 리스트에 해당하는 모든 성분의 갯수가 출력됨

2. 시간 복잡도

1) count() : O(n)

=> 리스트 전체를 한번 순회하면서, 해당하는 원소의 갯수를 +1 하는 원리

2) Counter() : O(n)

=> 리스트 전체를 한번 순회하면서, 모든 원소의 갯수를 기록하는 원리

3. 결론

  • count()와 Counter()는 시간복잡도 측면에서는 어짜피 1번은 순회해야 하기 때문에성능적인 차이는 없는 것 같다.
  • 다만 Counter()는 모든 원소의 갯수를 저장해야 하기 때문에 저장할 수 있는 공간이 필요하여 메모리가 더 필요하긴 하지만, 모든 원소의 갯수를 알아야 할 때 쓰면 좋을 것 같다!!

1가지의 원소에 대한 갯수 세기 : count()
여러가지의 원소에 대한 갯수 세기: Counter()

profile
매일매일 차근차근 나아가보는 개발일기

0개의 댓글