티스토리 뷰

 

조건 주어진대로 코드를 작성하고 Run Test를 했는데 성공해서 제출을 하니 그건 또 실패가 엄청 많았다...

 

뭐가 문제인지 모르고 다른 사람과 비교를 해보며 다른 부분 또는 함수를 찾고 검색을 해보았다.

 

하나를 바꾸니 바로 성공했다...

 

바로 remove()와 pop() 이었다. 코드를 작성할 때 나의 생각은 마지막 원소를 지우면 되니까 remove()로 마지막 원소를 지우면 되지 않을까? 했는데 그게 아니였다..

 

우선 코드를 보자!

 

<내가 쓴 오답 코드>

def solution(arr):
    answer = []
    i = 0
    while i < len(arr):
        if not answer:
            answer.append(arr[i])
            i += 1
        elif answer[-1] == arr[i]:
            answer.remove(answer[-1])		#이 부분이 문제였다!!
            i += 1
        elif answer[-1] != arr[i]:
            answer.append(arr[i])
            i += 1
    if answer == []:
        answer.append(-1)
    return answer

 

pop()과 remove()의 차이에 대해 찾아봤다.

 

  1. pop()
    • 리스트의 맨 마지막 원소를 리턴하고 해당 원소는 삭제한다.
    • pop(i)는 리스트의 i번째 원소를 리턴하고 삭제한다.
  2. remove()
    • remove(x)를 실행 시, 리스트에서 첫 번째로 나오는 x를 삭제한다.
    • 리스트에 동일한 x가 여러 개 있다면, 가장 첫 번째로 나오는 x만 삭제된다.

remove()를 사용해서 마지막 원소를 지운 것이 아니라 마지막 원소와 같은 값을 리스트에서 첫 번째로 나오는 x를 삭제한 것이다.

 

예를 들어, answer = [0, 1, 0] 이고, arr[i] = 0 이면 answer의 마지막 원소와 arr[i]의 값이 같으므로 answer의 마지막 원소인 0을 제거해서 answer = [0, 1] 이렇게 만들어줘야하는데 remove()를 사용하면 첫 번째로 나오는 0을 제거해서 answer = [1, 0]이 된다.

 

따라서 내가 쓴 오답 코드에 remove()만 pop()으로 바꿔줬다.

 

<내가 쓴 코드>

def solution(arr):
    answer = []
    i = 0
    while i < len(arr):
        if not answer:
            answer.append(arr[i])
            i += 1
        elif answer[-1] == arr[i]:
            answer.pop()			#pop()으로 변경!!
            i += 1
        elif answer[-1] != arr[i]:
            answer.append(arr[i])
            i += 1
    if answer == []:
        answer.append(-1)
    return answer
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함