득이공간
[백준 C++] 18115 카드 놓기 - 덱 본문
#include <iostream>
#include <deque>
using namespace std;
deque<int> Skills;
deque<int> InitialCards;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N;
cin >> N;
for (int i = 1; i <= N; ++i)
{
int Skill;
cin >> Skill;
Skills.push_back(Skill);
}
for (int Card = 1; Card <= N; ++Card)
{
int Skill = Skills.back();
Skills.pop_back();
int Temp;
switch (Skill)
{
case 1:
InitialCards.push_front(Card);
break;
case 2:
InitialCards.push_front(Card);
Temp = InitialCards[0];
InitialCards[0] = InitialCards[1];
InitialCards[1] = Temp;
break;
case 3:
InitialCards.push_back(Card);
break;
}
}
while (!InitialCards.empty())
{
cout << InitialCards.front() << ' ';
InitialCards.pop_front();
}
}
덱을 이용해서 푸는 문제입니다.
풀이 방법은 현재 놓여진 카드 상태가 위에서부터 1~N이 순서대로 배치되어 있으므로,
사용했던 기술을 뒤에서부터 현재 카드 상태에 거꾸로 적용해주어 초기 카드 상태로 복원해주면 됩니다.
1번 기술: 현재 놓여진 맨 위의 카드를 초기 카드 덱에 맨 위에 놓는다.
2번 기술: 현재 놓여진 맨 위의 카드를 초기 카드 덱 맨위에 놓고 두 번째 카드와 스왑한다.
3번 기술: 현재 놓여진 맨 위의 카드를 초기 카드 덱 맨 뒤에 놓는다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준 C++] 2467 용액 - 투포인터 (0) | 2024.02.21 |
---|---|
[백준 C++] 2166 다각형의 면적 - 기하학 (1) | 2024.02.21 |
[백준 C++] 11660 구간 합 구하기 5 - 다이나믹프로그래밍 (0) | 2024.02.20 |
[백준 C++] 9465 스티커 - 다이나믹프로그래밍 (1) | 2024.02.20 |
[백준 C++] 1932 정수 삼각형 - 다이나믹프로그래밍 (0) | 2024.02.20 |