본문 바로가기

알고리즘/스택, 큐16

[백준 -실버4] 10828번 스택(스택, 파이썬) https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net - 입력을 받으면 리스트에 넣어주고 주어진 기능을 그대로 수행했다. - top 의 경우 가장 위에 있는 정수를 출력해야해서 stack[-1] 가장 마지막 원소 출력 - pop의 경우 가장 위에 있는 정수를 빼고 그 수를 출력해야해서 stack.pop() 가장 마지막 원소 출력 import sys input = sys.stdin.readline n = int(input()) sta.. 2022. 1. 22.
[백준 -실버3] 1966번 프린터 큐(queue, 파이썬) https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net - 프로그래머스 코딩테스트 키트 -> 스택/큐에 있는 문제랑 같음 - while문 시작 전에 max_p에 가장 높은 우선 순위를 저장해놓는다. - while문 -> 맨 앞 문서가 중요도가 제일 높지 않으면 맨 뒤에 넣어준다. -> 이때 idx==0이면 순서가 궁금한 문서가 맨 뒤로 가야하므로 인덱스를 맨 뒤로 바꿔준다 -> 그게 아니면 인덱스를 한칸 앞으로 당긴다 -> 맨 앞 문서의 중요도가 가장 높.. 2022. 1. 20.
[백준 -실버4] 2164번 카드2(파이썬, queue, List 시간 복잡도) https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net - 맨 처음에 리스트(스택)을 사용하니까 시간 초과가 났다. -> 이유는 맨 위 원소를 뽑기 위해 stack.pop(0)을 사용했는데, pop(0)의 시간 복잡도는 O(n) -> stack.pop()의 시간 복잡도는 O(1)이다. - 따라서 큐를 사용했다. 큐의 popleft()는 맨 앞의 원소를 뽑아오고 시간 복잡도가 O(1)이다. - 카드 리스트의 길이가 1일때 종료 조건을 넣어주고, 맨 윗장.. 2022. 1. 20.
[백준-실버4] 10773번 제로(파이썬) https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net - 입력을 받으면서 입력이 0 이면 pop() 함수를 통해 가장 최근 들어온 원소를 제거한다. - 0이 아닌 경우는 리스트에 삽입한다. - 최종적으로 리스트의 합을 출력 import sys input = sys.stdin.readline n = int(input()) result = [] for _ in range(n): x = int(input()) if x =.. 2022. 1. 20.