본문 바로가기
프로그래머스/2단계

(Python/LV2) 롤케이크 자르기

by windy7271 2022. 10. 26.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

프로그래머스

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

programmers.co.kr

풀이:

 

내가 생각한 방법, for 문을 돌려 딕셔너리 key의 값 len 이 같을때 count 를 올린다.

 

def solution(topping):
    up_dic = dict()   # 형
    down_dic = dict() # 동생
    count = 0
    for i in range(1,len(topping)):
        for i in topping[:i]:
            if i not in up_dic:
                up_dic[i] = 0
            else:
                up_dic[i] += 1
        for i in topping[i::]:
            if i not in down_dic:
                down_dic[i] = 1
            else:
                down_dic[i] += 1

        if len(up_dic) == len(down_dic) :
            count += 1
    return count

 

테스트케이스만 맞고 시간초과로 다 틀림

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

set을 사용해줬음 

2개 맞음

 

from collections import Counter
def solution(topping):
    main = Counter(topping)
    main_set = set()
    count = 0
    for i in topping:
        main[i] -= 1
        main_set.add(i)
        if main[i] == 0:
            main.pop(i)
        if len(main) == len(main_set) :
            count +=1
        if len(main) < len(main_set):
            break
    return count

 

topping 을 counting 사용해서 dic 을 만들어준다.

비교할 대상인 main_set 을 만들어줌

 

topping 을 돌면서 1개를 빼주고 빼준거를 main_set 에 더해줌

 

만약 topping[i] 가 0 이면 나중에 len 비교할때 포함되므로 pop 해줌

main 과 set 의 길이가 같아지면 카운트를 올린다.

 

set 의 길이가 길어지면 더이상 할 필요없음

(맨 아래 if 문 필요없음)

 

반응형

댓글