Coding Study/Programmers

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

머준 2023. 8. 2. 10:45

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

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

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

 

프로그래머스

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

programmers.co.kr


문제 설명


제한 사항


입출력 예


풀이

def solution(topping):
    answer = 0
    middle = 0
    
    while middle < len(topping):
        if len(set(topping[:middle])) == len(set(topping[middle:])):
            answer += 1
        middle += 1
        
   	return answer

 처음 짰던 코드는 위와 같다. 롤케이크를 자르는 기준의 인덱스를 +1 씩 해주면서 동일한 토핑 갯수를 확인해주면서 같으면 answer+1 해주는 방식이다. 결과는 시간초과 파티..

 

[ 다시 짠 코드 ]

def solution(topping):
    answer = 0
    
    chulsu_cake = {}
    bro_cake = {}
    
    # 일단 철수한테 케이크 토핑을 다 줌
    for t in topping:
        if t in chulsu_cake:
            chulsu_cake[t] += 1
        else:
            chulsu_cake[t] = 1
    
    for t in topping:
        # 철수 케이크 토핑 개수 = 동생 케이크 토핑 개수 같으면 answer+1
        if len(chulsu_cake) == len(bro_cake):
            answer += 1
        
        # 동생한테 t 토핑 없으면 철수 토핑을 하나를 동생한테 줌
        chulsu_cake[t] -= 1
        if t not in bro_cake:
            bro_cake[t] = 1
        
        # 철수도 가지고 있지 않은 토핑이면 해당 인덱스 토핑 삭제
        if chulsu_cake[t] == 0:
            del chulsu_cake[t]
    
    
    return answer

1. 일단 철수한테 케이크 토핑을 다 준다.

2. 철수 케이크 토핑 개수와 동생 케이크 토핑 개수가 같으면 answer+1

3. 동생한테 t 토핑 없으면 철수 토핑 하나를 동생한테 줌

4. 철수도 가지고 있지 않은 토핑이면 철수 케이크의 해당 인덱스 토핑 삭제