간단하다고 생각했다. 다만 이제 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를 해주는 방식이다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: 두 정수 사이의 합> Level 1 - 파이썬 (0) | 2020.11.05 |
---|---|
<프로그래머스 문제풀이: 나누어 떨어지는 숫자 배열> (0) | 2020.11.01 |
<프로그래머스 문제풀이: 가운데 글자 가져오기> Level 1 - 파이썬 (0) | 2020.10.25 |
<프로그래머스 문제풀이: 2016년> Level1 - 파이썬 (0) | 2020.10.22 |
<프로그래머스 문제풀이: K번째 수> Level 1 - 파이썬 (0) | 2020.10.21 |