코드
def solution(arr):
answer = [arr[0]]
for i in range(1, len(arr)):
if arr[i] != arr[i-1]:
answer.append(arr[i])
return answer
주어지는 arr에서 연속으로 같은 수가 나오면 하나를 제거한 리스트를 리턴하는 문제이다.
예를 들어, arr=[1, 1, 3, 0, 1, 1]이면 [1, 3, 0, 1]을 리턴하는 것이다.
리스트에서 중복을 제거하는 것은 set을 이용하면 가장 쉽게 할 수 있다.
하지만, set은 순서가 존재하지 않는 자료형이기 때문에 우리가 구하고자 하는 답이 될 수 없다.
우리가 구하고자 하는 답은 순서는 그대로 유지하되, 중복된 요소 하나만 제거된 리스트이기 때문에 직접 하나하나 비교해주어야 한다.
하나씩 비교하기 위해 for문을 작성하였다.
이때 왜 answer에 arr[0]을 먼저 넣고 시작하는지에 대해 의문을 가질 수 있다.
나 역시도 0부터 len(arr)까지 i번째와 i+1번째를 비교하면 될 것 같은데라는 생각을 해서 아래와 같은 코드를 작성했었다.
for i in range(len(arr)):
if arr[i] != arr[i+1]:
answer.append(arr[i])
하지만 이 코드를 실행시켜보면 indexError가 발생한다.
그 이유는 i가 마지막 인덱스(= len(arr)-1)일 때 arr[i+1]이 arr의 범위를 넘어가기 때문이다.
그래서 i번째와 i-1번째를 비교하는 방식을 택한 것이다.
그럼 0부터 len(arr)까지 i번째와 i-1번째를 비교하면 에러가 발생하지 않느냐고 묻는다면 그것 또한 아니다.
i가 0이면 i-1은 존재하지 않는다.
그렇기 때문에 answer에 arr[0]을 추가한 상태에서 1번 인덱스부터 비교하는 것이다.
반응형