공부하자!/알고리즘

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

지우개원정대 2022. 11. 6. 23:41

시간복잡도 때문에 애먹었던 문제..

문제 자체는 간단하지만 카운터 사용법을 잘 몰라서 헤맸다.

 

토핑이 여러 개 올라가 있는 롤케이크를 철수와 동생이 잘라 먹는데,

무조건 두 조각의 토핑 종류 개수가 같아야 하는 문제였다.

일단 동생에게 토핑을 다 주고, 하나씩 철수가 받아서 토핑 개수를 확인하는 방향으로 코드를 짰다.

명심하자 set은 시간복잡도 O(n)이라는 걸..!!!

from collections import Counter

def solution(topping):
    answer = 0

    # 형, 동생 토핑 리스트
    a = {}
    b = Counter(topping)

    for i in range(len(topping)):
        if topping[i] in a:
            a[topping[i]] += 1
        else:
            a[topping[i]] = 1

        b[topping[i]] -= 1

        if b[topping[i]] == 0:
            del b[topping[i]]

        if len(a) == len(b):
            answer += 1

		# 시간 초과로 걸렸던 부분
        # a_topping = set(a)
        # b_topping = set(b)
        # if len(a_topping) == len(b_topping):
        #     answer += 1

    return answer