알고리즘

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

hminor 2024. 3. 22. 10:51

풀이

  • 처음 접할때는 두 번째 풀이와 같이 작성하면서도 시간 초과가 발생할 것 같았다.
  • 다만 해당 방법 이외에 어떻게 접근해야 할지 잘 떠오르지 않아서 
  • 힌트를 확인해보았는데 
  • 지금까지는 비교 대상에 대한 구조를 동일하게 하는 것을 습관으로 여겼다.
  • 예를 들어 배열이면 배열끼리, 딕셔너리면 딕셔너리, 집합이면 집합끼리 식으로.
  • 그런데 해당 힌트는 딕셔너리와 집합을 활용하면 된다고 하기에
  • 처음에는 어떤 방법인지에 대해 생각을 해봤는데
  • 딕셔너리에서 topping 요소를 하나씩 차감하는데 이때 값이 더이상 존재하지 않을 경우엔
  • 딕셔너리 자체에서 key값을 제거하고
  • 반복문을 돌때마다 해당 토핑을 철수라는 집합에 추가하게 되면 문제를 해결할 수 있다.

 

from collections import Counter
def solution(topping):
    result = 0
    bro = Counter(topping)
    chul = set()
    for i in topping:
        bro[i] -= 1
        if not bro[i]: del bro[i]
        chul.add(i)
        if len(bro) == len(chul): result += 1
    return result

 

시간 초과 코드

def solution(topping):
    result = 0
    for i in range(1,len(topping)):
        if set(topping[:i]) == set(topping[i:]): result += 1
    return result