문제

결과

나의 최종 제출 코드

"""
# 계수 정렬 idea
중복된 수의 배열에서 
topping :  토핑 종류( 번호)
return  공평하게 자르는 방법 수 (0 가능)
=> 숫자 종류가 같은 경우
0 graph : a,b => idx : 1~ 10,0000 번호
            => value 개수
for문으로 point 위치(왼쪽, idx 1~len(topping)-1-> 원소1 "p0 원소2")
1차 -> 시간 오류 
= > slice 횟수 줄여보기
t = 5 -> 3 이상 , t=3 -> 2개 이상 , t= 2 -> 1개 이상, t= 1 ->상관 ㄴㄴ
t= 4 -> 2이상 , t= 6 , 3 이상 
=> 올림
"""
import math
def solution(topping):
    answer = 0 # 공평하게 자를 수 있는 경우의 수
    # 0, graph
    bro, sister = set(),set() # 중복 제거
    #slice 횟수 조정 ->n개 종류(max(topping))중 최소 n/2
    min_type = round(max(topping)/2)
    for p in range(min_type, len(topping)) : 
        bro.update(topping[:p])
        sister.update(topping[p:])
        # 고유 원소 개수 비교
        if len(bro) == len(sister) :
            answer+=1
        bro.clear(), sister.clear()
        
    return answer

오답 풀이

문제 설명 및 요점

"""
# 계수 정렬 idea 적용
"""

def solution(topping):
    answer = 0 # 공평하게 자를 수 있는 경우의 수
    # 0, graph
    forward = set()
    backward = dict()
    # 1. key 종류, value: toppping 중복 개수
    for t in topping:
        backward[str(t)]= backward.get(str(t),0)
        backward[str(t)] += 1
    print(backward)
    #2. forward vs backward
    for t in topping :
        # f 에서 t가 추가됨 == b에서 t 빠짐
        forward.add(t)
        backward[str(t)] -=1
        if backward[str(t)] == 0 :
            del backward[str(t)]
        
        # 토핑 종류 같은 경우 = 공평 한 경우
        if len(forward) == len(backward.keys()):
            answer+=1
        
    return answer

Untitled