[프로그래머스_Lv1] 같은 숫자는 싫어

SOO·2023년 5월 25일
0

CodingTest

목록 보기
4/11

문제 설명

나의 풀이

(1)

def solution(arr):
    answer = [arr[0]]
    while len(arr) > 0:
        a = arr.pop(0)
        if answer[-1] != a:
            answer.append(a)
    return answer

이 코드로 모든 예제는 풀었지만, 효율성 검증에서 싸그리 탈락했다.
효율성 문제라 혼자서는 어디가 문제인지 모르겠어서 gpt의 도움을 받아봤다.

나는 pop()을 사용한게 신의 한수였다고 생각했는데
오히려 이게 시간복잡도를 높이는 결과가 되었다....

gpt가 2가지 해결방법을 알려줬다.

추가 배열 사용 없이 in-place로 요소를 제거하는 방법:

def solution(arr):
    i = 1
    while i < len(arr):
        if arr[i] == arr[i - 1]:
            arr.pop(i)
        else:
            i += 1
    return arr

추가 배열 사용 없이 중복되지 않는 요소를 새로운 배열에 추가하는 방법

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

나는 arr의 요소 하나하나를 체크하는게 더 비효율적인 코드라고 생각했는데 아니었다.
알고리즘 시간복잡도에 대해 좀 더 공부해야겠다.

profile
데이터 분석으로 세상을 읽어보쟈 빠샤

0개의 댓글