1일1알

백준 1158번 요세푸스 문제 C++ 본문

알고리즘

백준 1158번 요세푸스 문제 C++

영춘권의달인 2022. 6. 2. 14:01

출처 : https://www.acmicpc.net/problem/1158

 

처음에 큐에 1~n을 다 넣고 계속 빼다가 k번째로 빼는 경우는 정답을 저장하는 배열에 넣고 아니면 큐에 다시 넣었다.

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>

using namespace std;
using ll = long long;

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

	int n, k;
	cin >> n >> k;
	queue<int> q;
	vector<int> ans;
	for (int i = 1; i <= n; i++) {
		q.push(i);
	}
	int cnt = 0;
	while (!q.empty()) {
		cnt++;
		int curr = q.front();
		q.pop();
		if (cnt % k == 0) {
			ans.push_back(curr);
		}
		else {
			q.push(curr);
		}
	}
	cout << "<";
	for (auto &a : ans) {
		cout << a;
		if (&a != &ans.back()) {
			cout << ", ";
		}
	}
	cout << ">";
};

'알고리즘' 카테고리의 다른 글

백준 1406번 에디터 C++  (0) 2022.06.04
백준 10815번 숫자 카드 C++  (0) 2022.06.03
백준 10799번 쇠막대기 C++  (0) 2022.06.01
백준 17298번 오큰수 C++  (0) 2022.05.31
백준 2573번 빙산 C++  (0) 2022.05.30