Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 카프카
- 스프링 부트
- 스프링
- 클라우드
- aws
- 자료구조
- 스프링부트
- Kafka
- 백준
- 코드업
- JPA
- gcp
- 백트래킹
- VPC
- 쿠버네티스
- Apache Kafka
- 인천여행
- 오일러프로젝트
- Spring Boot
- 알고리즘
- 로드밸런서
- DFS
- Spring
- 클라우드 컴퓨팅
- 월미도
- Docker
- Elasticsearch
- 프로그래밍문제
- springboot
- Spring Data JPA
Archives
- Today
- Total
GW LABS
[Backjoon] 프린터 큐 본문
문제 조건을 제대로 파악하지 않고 우선순위 큐이겠거니 접근한 결과, 1시간 가량을 날려먹었다. 최소, 최대 힙으로 구현한 우선순위 큐에 대한 이해가 낮아서 이런 문제가 발생했다. 문제 조건만 제대로 파악하고 파이썬을 활용하면 아주 손쉽게 풀 수 있는 문제였다. 초기 인덱스를 값과 함께 묶어준 다음 큐 연산을 수행하는 게 핵심 아이디어이다.
import sys
from collections import deque
def rotate_documents(ziped_documents):
zip_max = max(ziped_documents)[0]
while ziped_documents[0][0] != zip_max:
ziped_documents.rotate(-1)
if __name__ == "__main__":
cases = int(sys.stdin.readline())
answer = []
for _ in range(cases):
count, target = list(map(int, sys.stdin.readline().split(" ")))
documents = list(map(int, sys.stdin.readline().split(" ")))
index_documents = list(range(len(documents)))
checker = documents[target]
ziped_documents = list(zip(documents, index_documents))
ziped_documents = deque(ziped_documents)
result = 0
printed, index_printed = None, None
while printed != checker or index_printed != target:
# print(ziped_documents)
rotate_documents(ziped_documents)
printed, index_printed = ziped_documents.popleft()
result += 1
answer.append(result)
for item in answer:
print(item)
또 파이썬의 deque 모듈을 이용하면 리스트를 이용하는 것보다 훨씬 빠른 삽입, 삭제, 회전 연산을 수행할 수 있다. 여러모로 배운게 많은 문제였다.
'Algorithm & DataStructure' 카테고리의 다른 글
C++로 구현하는 자료구조 (6) - Stack (0) | 2020.10.07 |
---|---|
[Backjoon] 뱀 (0) | 2020.10.06 |
[Backjoon] 안전영역 (0) | 2020.09.30 |
C++로 구현하는 자료구조 (5) - Binary Search Tree (0) | 2020.09.29 |
C++로 구현하는 자료구조 (4) - BinaryTree (0) | 2020.09.23 |
Comments