본문 바로가기

Algorithm/코딩테스트 고득점 Kit

[고득점 Kit / 스택&큐] 같은 숫자는 싫어

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이 문제는 스택에 대한 이해가 필요하다. 스택에 대해 잘 모르겠다면 필자의 다음의 글을 참고하자.

https://vegetableworld.tistory.com/222

 

[Python] 스택

스택은 가장 나중에 들어온 자료가 가장 먼저 빠져나가는 LIFO(Last-In-First-Out) 자료구조이다. 아래의 그림을 참고하면 이해하기 편하다.  그렇다면 파이썬에서는 스택을 어떻게 구현할까? 사실

vegetableworld.tistory.com

 

 

테스트케이스를 가지고 태블릿에 그림을 그려보며 문제 해결 방법을 찾았다.

 

코드를 보며 구현과정에 대해 살펴보자.

 

def solution(arr):
    answer = []
    answer.append(arr.pop())

    for i in range(0, (len(arr))):
        if arr[-1] == answer[-1]:
            arr.pop()
        else:
            answer.append(arr.pop())

    answer.reverse()
    return answer

 

 

예를 들어, arr = [1, 1, 3, 3, 0, 1, 1]이 주어진 경우:

  1. 첫 번째 arr.pop()에 의해 answer는 [1]이 된다.
  2. 반복문이 시작되며, arr에서 중복된 연속된 요소인 1과 3이 제거되고, answer에 새로운 요소들 (3, 0, 1)이 추가된다.
  3. answer.reverse() 후 최종 반환값은 [1, 3, 0, 1]이 된다.

 

당연한 이야기겠지만 해결방법을 찾고 코드를 치는게 낫다. 정확한 로직을 생각하지도 않고 코드부터 치니 삥 돌아온 느낌이었다.. 특히 스택과 관련된 경우 그림을 그리면서 확실한 문제해결 알고리즘을 생각하고 이를 코드로 구현하자!