728x90
반응형
문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/132265
풀이:
내가 생각한 방법, 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 문 필요없음)
반응형
댓글