celina의 이것저것

[C++] 백준 11866번 - 요세푸스 문제 0 본문

자료구조&알고리즘/백준

[C++] 백준 11866번 - 요세푸스 문제 0

celinayk 2023. 8. 3. 17:44
반응형

접근

큐를 이용해서 풀면된다 

코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <limits.h>
#include <algorithm>
#include <string>
#include <vector>
#include <math.h>
#include <cmath>
#include <cstring>
#include <queue>
#include <functional>
using namespace std;

queue<int> q;

int main() {

	int n, k;
	cin >> n >> k;

	//큐에 n까지 숫자 삽입 
	for (int i = 1; i <= n; i++) {
		q.push(i);
	}
	
	cout << "<";
	while (q.size()!=0) {

		for (int i = 1; i < k; i++) {
			int num = q.front();
			q.push(num);
			q.pop();
		}

		int num = q.front();
		cout << num;
		if (q.size() != 1) {
			cout << ", ";
		}
		q.pop();
	}
	cout << ">";

	return 0;
}

리뷰

1. 1부터 n까지 숫자를 큐에 넣는다

2. 큐에 있는 모든 원소가 사라질때가지 while문을 돌리면서

3. for문으로 front에 있는 원소를 빼서 (k번째 전까지) 다시 맨 뒤로 넣어준다

이렇게 해야 k번째 있는 수를 제거할 수 있음

4. k번째 수를 출력하고

5. 그 k번째 수는 pop해준다 

출처 

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

 

Comments