[백준 BOJ] 2164번 카드2 (C++/cpp)

2022. 2. 27. 17:28PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2164번: 카드2

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

www.acmicpc.net

백준 BOJ 2164번 카드2 문제 사진

 

접근 방법 - 큐를 이용한 간단한 연산

백준의 2164번 문제는 큐를 이용하여 간단하게 해결할 수 있는 문제이다.

해당 문제는, 일정 규칙에 따라 카드를 옮기고 버리면서 가장 마지막에 남는 카드를 구해야 하는 문제이다.

여기서 규칙은 간단하게, 제일 위에 있는 첫 번째 카드는 버리고 두 번째 카드는 맨 아래로 다시 넣는 행위의 반복이다.

필자는 큐를 선언하여 해당 문제를 해결하였다. 어떻게 응용하였는지는 아래를 참고하길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 큐를 선언한다.

 

2) 카드의 개수(n)를 입력받는다.

 

3) 1부터 n까지 큐에 push한다.

 

4) 큐의 크기가 1이 될 때까지, 즉 카드가 한 장 남을 때까지 아래의 연산을 반복한다.

- 맨 윗 카드를 나타내는 front값을 pop한다.

- 다음으로 오는 카드를 맨 아래로 옮긴다. 다음으로 오는 front값을 먼저 다시 push한 뒤 pop 연산을 취한다.

 

5) 마지막으로 남은 카드의 숫자를 출력한 뒤, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <queue>
using namespace std;

//백준 2164번 코드
int main() {
	queue<int> q;

	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		q.push(i);
	}

	while (q.size() != 1) {
		q.pop();
		q.push(q.front());	q.pop();
	}
	cout << q.front() << endl;
}

 

제출 결과

백준 BOJ 2164번 카드2 문제 C++ 제출 결과

(2022.02.06 백준 2164번 문제 제출 결과)

반응형