C. Yet Another Card Deck | Edu Round 107 Div.2

LONGNEW·2021년 7월 21일
0

CP

목록 보기
52/155

https://codeforces.com/contest/1511/problem/C
시간 2초, 메모리 256MB

input :

  • n q (2 ≤ n ≤ 3⋅105; 1 ≤ q ≤ 3⋅105)
  • a1, a2, …, an (1 ≤ ai ≤ 50)
  • t1, t2, …, tn (1 ≤ ti ≤ 50)

output :

  • Print q integers — the answers for each query.

조건 :

  • 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)

0개의 댓글