출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

 

간단하다고 생각했다. 다만 이제 array에서 원하지 않는 숫자들을 뽑아내는 방식을 해결하기만 하면 됐다. 나는 arr[i]와 arr[i+1]의 값이 같다면 i+1을 index_num list에 append 시키고, 이 list를 reverse로 정렬하여 i에 정의시킨 후, arr[i]를 list에서 삭제하는 방식으로 진행했다:

def solution(arr):
    
    index_num = []
    
    for i in range(len(arr)-1):
        if arr[i] == arr[i+1]:
            index_num.append(i+1)
    for i in sorted(index_num, reverse=True):
        del arr[i]
    return arr

이는 정확성 테스트에서 다 맞게 나왔지만, 효율성 테스트에서는 모두 시간 초과로 실패를 하고 말았다. 다른 방법을 고안해내야 했다.

 

def solution(arr):
    
    index_num = []
    answer = []
    answer.append(arr[0])
    for i in range(1, len(arr)):
        if arr[i] != arr[i-1]:
            answer.append(arr[i])
    return answer

이번에는 반대로, 첫번째 수는 무조건 중복이 안되므로 첫번째 수는 answer list에 append 시켜주고, 그 뒤의 array에 있는 것들을 그 전의 숫자와 비교하면서 중복될 경우 answer list에 append 시키지 않고, 중복되지 않을 경우 append 시키는 것으로 하였더니 코드 길이도 짧아졌고 간결해졌다

 

이를 통해 정확성과 효율성 둘 다 간단하게 통과할 수 있었다. 첫번째 숫자를 선택하지 미리 넣지 않고 하는 방법과는 달리 미리 넣고 뒤에 숫자를 체크해주는 방식을 사용하는 것도 새로운 발상이었다.

 

※ 다른 사람의 풀이

다음은 프로그래머스 다른 사람의 풀이에서 가장 많은 좋아요를 받은 풀이이다.

def solution(arr):
    answer = []
    for i in arr:
        if answer[-1:] == [i]:
            continue
        answer.append(i)
    return answer

이 풀이는 되게 신선하게 다가왔다. a라는 빈 list를 정의해주고, 만약 answer[-1:]즉 answer list의 마지막 숫자가 [i]와 같다면 바로 다음 i로 넘어가게끔 해주고(continue), 아니라면 answer에 i를 append를 해주는 방식이다.