Hi, There!
안녕하세요, 바오밥입니다.
목차
- 문제
- 풀이
문제 : 스택으로 큐 구현
문제 설명
스택 두개를 이용해 Queue 자료구조를 만들었을 때, Queue 자료 구조의 pop(또는 dequeue) 함수를 구현하려합니다.
Queue란 먼저 삽입한 데이터를 먼저 빼내는 자료구조를 뜻합니다.
pop 함수를 만들기 위해 다음과 같이 프로그램 구조를 작성했습니다.
1. 스택2가 비었다면 스택1에 아무것도 남지 않을때까지 스택1에서 pop한 값을 스택2에 push 한다.
2. 스택2에서 pop한 값을 리턴한다.
두 리스트 stack1, stack2가 매개변수로 주어질 때, 두 리스트를 스택으로 이용해 Queue 자료 구조의 pop 함수를 구현하려합니다.
위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.
※ 리스트 index가 0인 부분을 스택의 bottom으로 생각합니다.
매개변수 설명
두 리스트 stack1와 stack2가 solution 함수의 매개변수로 주어집니다.
stack1과 stack2는 길이가 0 이상 10 이하입니다.
stack1과 stack2의 길이가 모두 0인 경우는 주어지지 않습니다.
stack1과 stack2의 원소는 100 이하인 정수입니다.
return 값 설명
stack1과 stack2로 구현한 큐에서 pop(또는 dequeue)한 값을 return 해주세요.
예제 결과
예제 설명
예제 #1
1. stack2가 비지 않았으므로 stack2에서 pop 한 결과인 4를 리턴합니다.
예제 #2
1. stack2가 비었으므로 stack1의 원소를 전부 pop해 stack2로 넣습니다.
이 결과 stack2에는 [3,2,1]이 들어갑니다.
2. stack2에서 pop한 결과인 1을 리턴합니다.
풀이
풀이 코드 및 해설
def func_a(stack):
return stack.pop()
# 매개변수의 pop 연산을 통해 반환
def func_b(stack1, stack2):
while not func_c(stack1):
# stack1이 비어있지 않는 동안 반복문 실행
item = func_a(stack1)
# pop 연산을 통해 stack1의 요소를 item에 저장
stack2.append(item)
# stack2에 item 요소 추가
def func_c(stack):
return (len(stack) == 0)
# 스택의 bottom 인지 체크하는 함수
def solution(stack1, stack2):
if func_c(stack2):
# 만약 stack2가 bottom 이라면
func_b(stack1, stack2)
# stack1의 요소들을 모두 stack2로 이동
# 스택의 pop 연산 특성상 stack1의 요소들이 역순으로 배치됨 (FILO)
answer = func_a(stack2)
# stack1의 요소들이 역순으로 배치된 stack2의 요소들은 큐와 동일하게 구현됨. (FIFO)
return answer
'Certificate > Cert - Cos Pro 1급' 카테고리의 다른 글
[프로그래머스] Cos Pro 1급 모의고사, 코인을 많이 획득하세요 (2) | 2021.07.01 |
---|---|
[프로그래머스] Cos Pro 1급 모의고사, 만났을 때 최대인 경우 (0) | 2021.06.30 |
[프로그래머스] Cos Pro 1급 모의고사, 급여 총합 구하기 (0) | 2021.06.30 |
[프로그래머스] Cos Pro 1급 모의고사, UP AND DOWN 게임 (0) | 2021.06.30 |
[프로그래머스] Cos Pro 1급 모의고사, 지그재그 수열 (0) | 2021.06.30 |