티스토리 뷰
조건 주어진대로 코드를 작성하고 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()의 차이에 대해 찾아봤다.
- pop()
- 리스트의 맨 마지막 원소를 리턴하고 해당 원소는 삭제한다.
- pop(i)는 리스트의 i번째 원소를 리턴하고 삭제한다.
- 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
'Programmers > 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스] 문자열 뒤집기 ^^ (0) | 2024.02.21 |
---|---|
[프로그래머스] 문자 개수 세기 ^^ (0) | 2024.02.21 |
[프로그래머스] 두 수의 합 (0) | 2024.02.20 |
[프로그래머스] 왼쪽 오른쪽 (0) | 2024.02.20 |
[프로그래머스] 세 개의 구분자 * (0) | 2024.02.19 |