알고리즘/스택,큐

[프로그래머스] 같은 숫자는 싫어 - 파이썬(python)

아뵹젼 2022. 9. 2.

 

 

나의 풀이

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

           
    return answer

빈 배열일 때는 원소에 접근을 할 수 없어 if answer 로 answer 배열이 빈 배열인지 확인하는 조건을 추가했다.

 

그런데..!

다른 분의 풀이를 보고 새로운 사실을 알게 되었다.

 

다른 풀이

def no_continuous(s):
    a = []
    for i in s:
        if a[-1:] == [i]: continue
        a.append(i)
    return a

나는 배열[-1] 로 마지막 원소에 접근을 하였는데,

이분은 배열[-1:] 로 리스트끼리의 비교를 하였다...!

리스트를 슬라이싱하면 그대로 리스트가 산출물로 나오기 때문에,

비교대상인 i도 [i] 로 리스트화 해주어, 리스트끼리의 비교가 가능하게 만들었다.

 

 

def no_continuous(s):
    result = []
    for c in s:
        if (len(result) == 0) or (result[-1] != c):
            result.append(c)
    return result

혹은 이렇게 리스트의 길이를 확인하는 조건문을 or 연산자 앞에 먼저 써주는 방법도 있었다!

이럴 경우 or 연산자의 앞 조건문이 True 라면 뒤 조건을 검사하지 않고, 바로 아래 구문을 실행하기 때문에

result[-1] 에서 error 가 날 이유가 없기 때문이다...!

 

 

 

파이썬 스택 관련 함수

파이썬에서는 list 로 스택을 사용할 수 있다.

스택이란  가장 나중에 넣은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조로 Last In First Out(LIFO) 방식이다.

 

1) append

push() 대신 리스트.append(i) 를 사용하여 리스트의 맨 마지막에 원소를 추가할 수 있다.

 

2) pop

리스트의 맨 마지막 요소를 꺼내어 반환하는 동시에 삭제한다.

즉, A = [1,2,3] 이라는 리스트가 있을 때

print(A .pop()) 을 하면 3이 출력될 것이다.

그리고 A 리스트를 출력해보면 [1,2] 만 남아있음을 알 수 있다.

댓글