컴굥일지

[BOJ/백준 2164][C++] 카드2 본문

알고리즘/코테 문제

[BOJ/백준 2164][C++] 카드2

gyong 2022. 4. 9. 03:23
반응형

문제

https://www.acmicpc.net/problem/2164

백준 2164

 

문제 내용

1~N까지의 카드가 있다. 1번이 제일 위에 있고, N이 제일 아래에 있다.

카드가 한 장 남을 때까지 두 가지 행위를 번갈아가며 진행한다.

1. 제일 위에 있는 카드를 버린다.
2. 제일 위에 있는 카드를 제일 밑으로 옮긴다.

 

문제 풀이

queue를 사용하여 문제를 풀면 된다.

queue에 1~N까지 차례로 추가하고 위에서 설명한 행위를 진행하면 된다.

 

코드

#include <iostream>
#include <queue>
using namespace std;

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

	//입력
	int n;
	cin >> n;
	queue<int> qq;

	//문제 해결
	for (int i = 1; i <= n; i++) qq.push(i);

	int type = 0;
	while (qq.size()!=1) { //1개 남으면 탈출
		if (type%2==0) { //맨 위의 카드 버림
			qq.pop();
		}
		else { //맨 위의 카드를 제일 아래로 옮김
			qq.push(qq.front());
			qq.pop();
		}
		type++;
	}
	
	//결과 출력
	cout << qq.front() << '\n';
}

반응형
Comments