강의로 돌아가기
호뚝이

시간초과 어떻게 해결해야할까요?

def solution(topping):
answer = 0
for i in range(len(topping)):
answers = []
answers2 = []
answers.extend(topping[0:i+1])
answers2.extend(topping[i+1:])
a = set(answers)
b = set(answers2)
if len(a) == len(b):
answer += 1
return answer

시간초과가 뜹니다. 어떻게 하면 시간을 줄일 수 있나요? 리스트내포를 두 리스트에 대해서도 할 수 있나요?

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
def solution(topping):
    answer = 0
    for i in range(len(topping)):
        answers = []
        answers2 = []
        answers.extend(topping[0:i+1])
        answers2.extend(topping[i+1:])
        a = set(answers)
        b = set(answers2)
        if len(a) == len(b):
            answer += 1
    return answer
2 개의 답변
박수경

answers와 answer2를 매번 초기화 하셔서 그럽니다.

첫 시작에서 answers와 answer2를 만드시고
매 번 answers에 더하고, answer2에서 빼시면서 계산하시면 속도가 많이 빨라지실 것입니다.

투포인터를 생각하시면 이해가 쉽습니다.

opjoobe

윗분 말씀대로 매번 answer와 answer2를 재구성하고, 집합도 재구성하셔서 그런거 같아요.
저 같은 경우에는 최초에 topping을 기준으로 한 집합#1, 비어있는 집합#2을 선언해주고,
topping 에서 하나씩 pop해서 얻어낸 맛을 집합#2에는 add하고 집합#1에서는 조건에 따라 그 맛을 remove해가는 방식으로 구현했습니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.