오랜만에 스택과 큐를 접해서 개념을 다시 가볍게 짚고 넘어가자.
1. Stack(스택)
LIFO(Last in, First Out) : 마지막에 입력된 데이터가 가장 먼저 제거되는 구조
apeend() 를 사용해서 마지막에 데이터를 추가하고 꺼낼 때는 pop()을 사용하여 마지막 데이터를 꺼낸다.
2. Queue(큐)
FIFO(First in , First Out) : 먼저 입력된 데이터가 먼저 제거되는 구조
3. Deque (Double Ended Queue)
파이썬에서 내장 모듈인 collections에 있는 것으로 스택과 큐를 합쳐놓은 듯한 자료구조를 의미한다.
- 가장 앞에 있는 데이터를 꺼내기 위해서 popleft() 함수 사용
- 가장 앞에 데이터를 넣기 위해서 appendleft() 함수 사용
- pop(0) 처럼 비효율적이지 않고 O(1)의 시간복잡도를 가진다.
📌 문제
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
- arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
- arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
제한사항- 배열 arr의 크기 : 1,000,000 이하의 자연수
- 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
📌 풀이
만일 이전에 들어온 숫자와 같으면 append를 하지 않고, 같지 않으면 append를 한다.
- arr에서 원소를 하나씩 꺼내서 정답 리스트에 append 한다.
- 정답 리스트의 마지막 원소와 append하고자 하는 원소가 같을 경우 append를 하지 않는다.
def solution(arr):
result = []
for i in arr :
if (len(result) == 0) or (result[-1] != i) :
result.append(i)
return result
✍️Reference
https://wikidocs.net/198491#_1
'STUDY > Algorithm' 카테고리의 다른 글
[알고리즘/스택과 큐] 프로그래머스 - 올바른괄호 (0) | 2024.07.10 |
---|---|
[알고리즘/스택과 큐] 프로그래머스 - 기능개발 (0) | 2024.07.10 |
[알고리즘/정렬] 프로그래머스 - K번째 수 (0) | 2024.07.06 |
[알고리즘/정렬] 프로그래머스 - H-Index (0) | 2024.07.06 |
[알고리즘/정렬] 프로그래머스-가장 큰 수 (0) | 2024.07.05 |