https://codeforces.com/contest/1511/problem/C
시간 2초, 메모리 256MB
input :
output :
조건 :
You have a card deck of n cards, numbered from top to bottom, i. e. the top card has index 1 and bottom card — index n. Each card has its color: the i-th card has color ti.
1의 위치를 top, n의 위치를 bottom이라 하며 n개의 카드로 이루어진 덱이 존재한다.
각각의 카드는 각자의 색깔이 존재한다.
find the highest card in the deck with color tj, i. e. the card with minimum index;
print the position of the card you found;
take the card and place it on top of the deck.
tj로 된 카드 중 가장 앞에 위치한 카드를 찾는다; 카드의 위치를 출력한다.; 찾은 카드를 덱의 가장 앞으로 보낸다.
문제를 보다가 생각이 난 것은 어차피 카드가 아무리 많아도 동일한 카드가 존재한다면 제일 앞의 카드만 사용한다는 것이다. 그래서 인덱스를 각각 알고 있다면 개수를 줄여서 사용할 수 있겠다는 생각이었다.
근데 모든 컬러가 다르다면 상관이 없지 않냐는 게 생각이었고.
그러나, 자료구조를 생각해 보아야 했다.
특정 카드를 찾은 다음에 제일 앞으로 보내려면 어떤 메소드를 사용하면 될까?
index와 queue를 이용하면 사용이 가능하다.
queue에서 원소를 맨 뒤에 넣을 수도 있지만 앞에서 부터 넣을 수도 있기 때문에 이를 사용하면
편하게 구현이 가능하다.
자료구조를 떠올리자..
import sys
from collections import deque
n, q = map(int, sys.stdin.readline().split())
color = list(map(int, sys.stdin.readline().split()))
query = list(map(int, sys.stdin.readline().split()))
q = deque(color)
for item in query:
idx = q.index(item)
print(idx + 1, end=" ")
q.remove(item)
q.appendleft(item)