[프로그래머스] Lv1. 같은 숫자는 싫어(Python)

zzzzsb·2024년 10월 8일
0

프로그래머스

목록 보기
29/33

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12906

풀이 시간

약 5분

접근 방법

스택 자료구조를 사용했다.

스택의 마지막 원소와 현재 숫자가 다를때만 스택에 숫자를 추가해주면 된다.


정답 코드

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

Thinking 👀

answer가 empty array 상태일때는 answer[-1] 로 비교하면 indexing errorr가 발생한다.

그래서 처음에 answer=[arr[0]] 과 같이 첫번째 원소를 넣어 초기화 해준뒤 코드를 작성했다.

1) answer[-1:] 형태로 리스트 생성

그런데 다른 사람들 풀이를 보니 …. answer[-1:] 형태로 값을 비교한 풀이가 있었다.

answer[-1:] 로 리스트를 만들어 값을 비교해주면 인덱싱 오류가 발생하지 않는다!

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

물론 매번 비교할때마다 맨 마지막 원소로 리스트를 만들어줘야 하기 때문에, 코드 효율성 부분에서는 2배정도 시간이 더 소요되었다. 리스트 생성할때마다 메모리 할당 과정이 추가로 소요되기 때문!

2) or 연산자로 조건부 처리

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

아니면 or 연산자로 answer가 empty array일때 조건을 추가해줘도 된다.

profile
성장하는 developer

0개의 댓글