[BOJ] 2164번 카드2

HyunDDeung·2022년 7월 7일
0

BOJ

목록 보기
3/12

풀이

이 문제는 큐(queue)를 이용하면 쉽다는 사실만 발견하면 수월하게 코드를 작성할 수 있다.
큐를 이용하여 문제에 주어진 내용을 그대로 따라가 주면 된다.
먼저 큐에 숫자들을 저장한 이후 제일 앞(front)에 있는 숫자를 버리고(pop) 그 다음 front 숫자를 맨 뒤로 보내면 된다. 이를 n-1번 만큼 반복하게 된다면 문제에서 원하는 단 하나의 숫자만 남게 된다.

코드


#include <iostream>
#include <queue>

using namespace std;

void init() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
}

int main() {
	init();

	int n;
	cin >> n;

	queue<int> q;
	queue<int> ans;

	// 초기 카드 모양으로 초기화해줌.
	for (int i = 0; i < n; i++) {
		q.push(i+1);
	}
	
	for (int i = 0; i < n - 1; i++) {
		
		q.pop();	// 제일 위에 있는 카드를 제거
		int temp = q.front();	// 그 다음 카드를 제일 아래로 내리기 위해 저장해둠
		q.pop();	// 제거
		q.push(temp);	// 제일 뒤로 다시 넣음
	}

	for (int i = 0; i < q.size(); i++) {
		cout << q.front() << " ";
		q.pop();
	}
}

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

profile
감사합니다.

0개의 댓글