[백준/Python] 11652번 카드

2025. 2. 28. 14:02·알고리즘문제풀이

문제

https://www.acmicpc.net/problem/11652


문제 이해

카드의 개수를 세고 가장 많은 카드의 개수의 정수를 출력하는 문제이다.

"가장 많은 카드의 개수의  정수가 여러가지이면, 숫자가 작은 것을 출력한다"라는 것이 조건에 있다.


문제 풀이(시간 초과)

# 시간 초과
n = int(input())
li = []
ans = []
for _ in range(n):
    card = int(input())
    li.append(card)

li.sort()
card_set = list(set(li))
card_set.sort()

cnt = []
for c in card_set:
    cnt.append(li.count(c)) # 시간초과 원인

for i,v in enumerate(cnt):
    if max(cnt) == v:
        ans.append(card_set[i])

print(min(ans))

 

내가 나름 풀어 본 코드이다.

count() 함수로 인해 시간초과가 발생했다.

 

count()를 사용하면 리스트를 여러번 순회하기 때문에 시간초과가 발생하는 것이다.

이 문제의 해결 방법은 Counter() 이였다!!


문제 풀이(정답 : Counter())

# 정답 : Counter() 사용
n = int(input())
card = [int(input()) for _ in range(n)]
ans = []

from collections import Counter
cnt = Counter(card).most_common() # 데이터 개수 많은 순대로

max_cnt = cnt[0][1]
for i in cnt:
    if i[1] == max_cnt:
        ans.append(i[0])
ans.sort()
print(ans[0])

 

count()의 시간 초과 문제를 해결하기 위해 Counter() 함수를 사용했다.

그리고 입력값도 리스트 컨프리헨션으로 좀 더 깔끔하게 코드를 작성했다.

 

count() vs Counter()

count()는 내장함수이고 Counter()는 외장함수이다.

from collections import Counter

 

count()는 set자료형에서는 사용이 불가하고 딕셔너리 형태로 사용하면 좋다.

Counter()를 사용하면 더 쉽게 딕셔너리 형태로 사용 가능하다.

 

그리고 가장 중요한 점인 Counter()는 순회하지 않고 한 번에 모든 개수를 구할 수 있어서 시간 효율성이 굉장히 좋다.

 

Counter()의 특징

  • Counter 생성자에 문자열을 인자로 넘기면 각 문자가 문자열에서 몇 번씩 나타나는지를 알려주는 객체가 반환됩니다.
  • most_common() : 데이터 개수 많은 순대로 출력한다.
저작자표시 비영리 변경금지 (새창열림)

'알고리즘문제풀이' 카테고리의 다른 글

[백준/Python] 11729번 2×n 타일링  (0) 2025.03.05
[백준/Python] 28278번 스택 2  (0) 2025.03.04
[백준/Python] 7785번 회사에 있는 사람  (0) 2025.02.27
[백준/Python] 2563번 색종이  (0) 2025.02.26
[백준/Python] 2606번 바이러스  (0) 2025.02.25
'알고리즘문제풀이' 카테고리의 다른 글
  • [백준/Python] 11729번 2×n 타일링
  • [백준/Python] 28278번 스택 2
  • [백준/Python] 7785번 회사에 있는 사람
  • [백준/Python] 2563번 색종이
jungyn
jungyn
jungyn 님의 블로그 입니다.
  • jungyn
    jungyn 님의 블로그
    jungyn
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • 알고리즘문제풀이 (31)
      • 제로인턴 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    후기
    2108
    2차원행렬
    SYS
    1629
    1847
    프로그래머스
    2161
    스택 2
    2563
    교점개수
    28278
    DP
    카드1
    counter
    2606
    18110
    수들의 합 2
    11729
    사전직무교육
    백준
    스택
    solved.ac
    스택 수열
    제로인턴
    다이나믹프로그래밍
    BFS
    통계헉
    시간초과
    너비우선탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jungyn
[백준/Python] 11652번 카드
상단으로

티스토리툴바