카드 한 벌이 있다고 가정합니다. 모든 카드에는 하나의 고유 번호가 있습니다. 원하는 순서대로 데크를 주문할 수 있습니다. 따라서 처음에는 모든 카드가 한 데크에서 앞면이 보이지 않게(공개되지 않은) 시작됩니다. 이제 모든 카드가 공개될 때까지 다음 단계를 여러 번 수행합니다. -
-
카드 한 벌이 있다고 가정합니다. 모든 카드에는 하나의 고유 번호가 있습니다. 원하는 순서대로 데크를 주문할 수 있습니다. 따라서 처음에는 모든 카드가 한 데크에서 앞면이 보이지 않게(공개되지 않은) 시작됩니다. 이제 모든 카드가 공개될 때까지 다음 단계를 여러 번 수행합니다. -
-
덱에 아직 카드가 있으면 덱의 다음 맨 위 카드를 덱 맨 아래에 놓습니다.
-
아직 확인되지 않은 카드가 있으면 1단계로 돌아가세요. 그렇지 않으면 프로세스를 중지하세요.
따라서 카드를 오름차순으로 표시하는 데크의 순서를 반환해야 합니다.
이제 답변의 첫 번째 항목이 덱의 맨 위에 있는 것으로 간주됩니다.
따라서 입력이 [17,13,11,2,3,5,7]과 같으면 출력은 [2,13,3,11,5,17,7]이 됩니다. [2,13,3,11,5,17,7], 이제 2가 맨 위에 있고 2를 본 후 13을 마지막으로 이동하므로 데크는 [3,11,5,17,7,13 ], 그런 다음 3을 제거하고 단계를 다시 수행하십시오. 따라서 데크는 [5,17,7,13,11]이 되고, 그 후에 5를 제거하고, 위에서 아래로 이동한 후 배열은 [7,13,11,17]이 되고 동일한 작업을 수행하면 데크가 구조는 [11,17,13], [13.17], [17]이 되고 17을 삭제합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
먼저 데크를 정렬할 때 n :=데크의 크기를 설정합니다.
-
큐 q와 크기가 n인 배열을 정의
-
연속적인 i 요소를 q에 삽입합니다. 여기서 i는 0에서 n – 1까지입니다.
-
0 ~ n – 1 범위의 i에 대해
-
x :=q의 앞 요소, 대기열에서 삭제
-
ans[x] :=데크[i]
-
x :=q의 앞 요소 및 대기열에서 삭제
-
q에 x 삽입
-
-
반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> deckRevealedIncreasing(vector& deck) { sort(deck.begin(), deck.end()); int n = deck.size(); queue <int> q; vector <int> ans(n); for(int i = 0; i < n; i++)q.push(i); int x; for(int i = 0; i < n; i++){ x = q.front(); q.pop(); ans[x] = deck[i]; x = q.front(); q.pop(); q.push(x); } return ans; } }; main(){ vector<int> v1 = {17,13,11,2,3,5,7}; Solution ob; print_vector(ob.deckRevealedIncreasing(v1)); }
입력
[17,13,11,2,3,5,7]
출력
[2,13,3,11,5,17,7]