강의로 돌아가기
김동현

코드 피드백 부탁드립니다.

처음 코드는 while True 부분을 while x in L: 으로 주어서 비효율적이라는 생각이 들어 True로 바꾸고 try~except문을 사용했습니다.
더 효율적인 방법이 있을까요?

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def solution(L, x):
    answer = []
    if x not in L:
        answer = [-1]
    else:
        i = 0
        while True:
            try:
                p = L.index(x)
                answer.append(i+p)
                L.pop(p)
                i+= 1
            except:
                break

    return answer
1 개의 답변
이시윤

글쎄요, index() 메서드를 이용하는 경우라면 pop() 을 하는 (이것도 리스트의 길이에 비례하는 복잡도를 가집니다) 것보다는 슬라이스를 이용해서 하나의 원소를 발견한 후에는 그 후부터 끝까지의 범위를 대상으로 또다시 index() 메서드를 적용하는 방법이 더 나아 보입니다. 또한, LL3-4 의 부분도 x not in L 을 이용하지 않고 (이것도 리스트 길이에 비례하는 복잡도를 가지므로) 순환문이 끝난 후에 answer 를 검사하는 방법이 더 효율적이겠습니다.

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