Development Artist

[Baekjoon, C++] 2164번 : 카드2 본문

Algorithm/Baekjoon

[Baekjoon, C++] 2164번 : 카드2

JMcunst 2021. 1. 13. 21:31
728x90
반응형

백준 단계별 풀기에서 큐,덱 두 번째 문제이다.

링크는 아래와 같다.

www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net


백준 2164번 문제, 입력, 출력


백준 2164번 입출력 예제 1


1. for문으로 i=1부터 해서 N까지 숫자들을 queue에 push한다. 

 

2. 하나가 남을때 까지 = queue의 사이즈가 1이 될 때 까지. 따라서 while문으로 하고 조건은 queue.size() > 1로 한다.



#include<iostream>
#include<queue>

using namespace std;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int numberOfCard;
	int lastOfCard = 0;
	queue<int> que;

	cin >> numberOfCard;

	for (int i = 1; i <= numberOfCard; i++) {
		que.push(i);
	}

	while (que.size() > 1) {
		que.pop();
		if (que.size() == 1) {
			lastOfCard = que.front();
			break;
		}
		int topOfCard;
		topOfCard = que.front();
		que.push(topOfCard);
		que.pop();
	}

	cout << lastOfCard;

	return 0;
}

하지만 결과는...

근데 생각해보면, 따로 변수를 둬서 그것들을 저장하는 것이 아니라, que.front()를 이용해서 바로 넣어주면 코드가 더 간단해 진다. 오버플로우가 날 경우, 틀렸습니다도 출력한다는 것을 보았었는데, 그 문제가 아닐까 짐작해본다.



#include<iostream>
#include<queue>

using namespace std;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int numberOfCard;
	queue<int> que;

	cin >> numberOfCard;

	for (int i = 1; i <= numberOfCard; i++) {
		que.push(i);
	}

	while (que.size() > 1) {
		que.pop();
		que.push(que.front());
		que.pop();
	}

	cout << que.front();

	return 0;
}

이상으로 2164번 이였다.

728x90
반응형
Comments