본문 바로가기
알고리즘 문제 풀이

프로그래머스 롤케이크 자르기

by 로널드 피셔 2023. 1. 25.

출처 : 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의 길이를 비교한다.

댓글