알고리즘 문제

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

feelcoding 2021. 1. 3. 15:15
728x90

www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

벡터의 원소를 직접 제거해가면서 풀었다.

주의할 점은 벡터의 크기가 점점 줄어들기 때문에 index가 벡터의 범위를 넘어가지 않게 % 연산자를 이용해 조정해줘야 한다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	int n, k;
	cin >> n >> k;
	vector<int> v(n);
	for (int i = 0; i < n; i++) {
		v[i] = i + 1;
	}
	int index = 0;
	while (!v.empty()) {
		if (v.size() == n) {
			cout << '<';
		}
		index += (k - 1);
		index %= v.size();
		cout << v[index];
		v.erase(v.begin() + index);
		if (v.empty()) {
			cout << '>';
		}
		else {
			cout << ", ";
		}
	}
	return 0;
}
728x90