문제:

풀이방법:

우선 한쪽으로 케이크의 모든 토핑을 모아두고, 하나씩 반대로 옮기면서 갯수가 같아지는 지점을 체크하도록 한다.

 이 과정을 편하게 하기 위해 dict 자료형을 선택했고, collections의 defaultdict을 사용했다. defaultdict은 dict의 key 초기화 과정이 필요하지 않다는 장점이 존재한다.

 따라서 하나씩 토핑을 제거하고, 제거한 토핑은 반대 dict의 넘겨준다. 만약 value가 0이 된다면 key를 제거한다. 이렇게 했을 때, 두 dict의 key의 길이가 같다면 공평하게 자르는 방법이라고 생각한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from collections import defaultdict
def solution(topping):
    answer = 0
    cake = defaultdict(int)
    for t in topping:
        cake[t]+=1
 
    split_cake = defaultdict(int)
    for t in topping:
        cake[t]-=1
        split_cake[t]+=1
        if cake[t]==0:
            del cake[t]
        if len(cake.keys()) == len(split_cake.keys()):
            answer+=1
 
    return answer
cs

문제링크:

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

 

프로그래머스

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

programmers.co.kr

 

'Algorithm > Python' 카테고리의 다른 글

[Programmers] Lv 2. 연속된 부분 수열의 합  (0) 2023.07.18
[BOJ] 21921. 블로그  (0) 2023.07.17
[BOJ] 1111. IQ Test  (0) 2023.07.13
[BOJ] 2002. 추월  (0) 2023.07.12
[Programmers]Lv 2. 숫자 변환하기  (0) 2023.07.11

+ Recent posts