출처 : https://school.programmers.co.kr/learn/courses/30/lessons/132265
from collections import Counter
def solution(topping) :
answer = 0
top_1 = Counter(topping)
top_2 = set()
for i in range(len(topping)) :
top = topping[i]
top_2.add(top)
top_1[top] -= 1
if top_1[top] == 0 :
# 딕셔너리에서 특정 키 제거. del dict[key] 도 가능
top_1.pop(top)
if len(top_1) == len(top_2) :
answer += 1
return answer
모든 인덱스마다 앞뒤로 쪼개서 집합의 길이를 비교하면 시간 초과가 뜬다.
한참을 고민해도 안 풀려서 검색을 했더니 Counter를 사용하는 풀이가 있었다.
전체 topping을 대상으로 Counter를 적용한 top_1을 저장한다.
그리고 topping의 앞에서부터 하나씩 집합 top_2에 추가하면서 그만큼 top_1에서는 제외하고, top_1과 top_2의 길이를 비교한다.
'알고리즘 문제 풀이' 카테고리의 다른 글
백준 1991번 : 트리 순회 (Python) (비재귀 반복문) (0) | 2023.03.03 |
---|---|
백준 13904번 : 과제 (Python) (0) | 2023.02.26 |
백준 10971번 : 외판원 순회 2 (Python) (0) | 2023.01.25 |
백준 2206번 : 벽 부수고 이동하기 (Python) (0) | 2023.01.19 |
백준 1504번 : 특정한 최단 경로 (Python) (0) | 2023.01.02 |
댓글