PS/programmers

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

조각선생 2022. 11. 5. 23:06

풀이

처음에는 아래와 같이 풀었는데 시간 초과가 납니다.

def solution(topping):
    answer = 0
    length = len(topping)
    for i in range(1, length-1):
        chul, bro = topping[0:i], topping[i:length]
        if len(set(chul)) == len(set(bro)):
            answer += 1
    
    return answer

 

아래는 정답 코드입니다.

from collections import Counter
def solution(topping):
    answer = 0
    topping_counter = Counter(topping)
    topping_set = set()
    for top in topping:
        topping_counter[top] -= 1
        topping_set.add(top)
        if topping_counter[top] == 0:
            topping_counter.pop(top)
        if len(topping_counter) == len(topping_set):
            answer += 1
    
    return answer

1. topping을 Counter로 만들어줍니다.

2. set도 하나 만들어줍니다.

3. topping을 하나씩 돌면서, Counter에서 1씩 빼줍니다.

4. 이때, 토핑의 개수가 0이 되면 해당 key를 아예 없애줍니다.

5. Counter와 set의 개수가 같을 때마다 answer를 하나씩 세어줍니다.

 

 

- Counter를 len으로 길이를 구하면 해당 key의 개수를 구할 수 있습니다.

- dictionary도 마찬가지로 len으로 길이를 바로 구할 수 있습니다. (여태까지 len(a.keys())로 구했던거 같음....)

- dictionary의 이름이 a라고 할 때, a.pop('키이름')하면, 해당 키를 삭제할 수 있습니다.