«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Recent Posts
Tags more
Today
Total
관리 메뉴

내 인생은 개발 중

[프로그래머스] 롤케이크 자르기 - Python 본문

Algorithm/프로그래머스

[프로그래머스] 롤케이크 자르기 - Python

seul.e 2024. 5. 19. 12:15

https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

from collections import Counter
def solution(topping):
    answer = 0
    # 처음에 철수에게 토핑 다 주기
    chulsu = Counter(topping)
    brother = set()

    for t in topping:
        # 토핑 철수한테서 하나씩 빼서 동생에게 주기
        chulsu[t] -= 1
        brother.add(t)

        # 해당 토핑의 갯수가 0이면 제거 (0이어도 남아있으면 길이에 포함되므로)
        if chulsu[t] == 0:
            chulsu.pop(t)

        # 철수와 동생이 가진 토핑의 갯수가 같아지면 answer + 1
        if len(chulsu) == len(brother):
            answer += 1

    return answer

 

💡알게 된 점💡

이 문제는 리스트 슬라이싱을 이용해서 풀 생각까지는 했었는데 토핑의 갯수를 어떻게 세어야 할 지 방법이 떠오르지 않아 결국 다른 사람의 풀이를 이용해서 풀었다. set을 이용해서 풀 수도 있지만 n의 최대 길이가 길기 때문에 그렇게 풀어도 시간초과가 나기 때문에 결국은 Counter를 이용해서 풀어야한다.

Counter를 이용하면 각 원소가 몇 번씩 나오는지 저장된 객체를 얻을 수 있다. Counter는 딕셔너리처럼 값을 갱신할 수 있으며, add와 pop을 이용해서 추가,제거한다.

 

아직 다양한 문제 풀이 방법에 익숙해지지 않은 것 같다 ㅜㅜ 최대한 많이 풀어서 다양한 문제 풀이 방식을 스스로 구현해낼 수 있게 해야겠땨!

Comments