본문 바로가기

프로그래밍/PS

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

반응형

11866번: 요세푸스 문제 0

이 문제는 생각보다 어렵지 않다.

나는 vector를 이용해 1부터 N까지 push_back 하고, count라는 변수를 이용했다.

count가 K가 되면 그 때 iterator가 가리키고 있던 요소를 출력하고 해당 요소를 erase한다.

그리고 count는 1이 된다. count가 다시 K가 될 때 까지 iterator는 다음 요소를 가리키고, 마지막 요소인 경우 처음을 가리킨다.

#include <cstdio>
#include <vector>

using namespace std;

int main() {
	int N, K;
	scanf("%d %d", &N, &K);

	vector<int> P;
	for (int i = 0; i < N; i++) {
		P.push_back(i + 1);
	}

	int count = 1;
	printf("<");
	auto iter = P.begin();
	while (P.size()) {
		if (count == K) {
			printf("%d", *iter);
			iter = P.erase(iter);
			if (iter == P.end())
				iter = P.begin();
			if (P.size())
				printf(", ");
			else
				break;
			count = 1;
		}
		else {
			if (++iter == P.end())
				iter = P.begin();
			count++;
		}
	}
	printf(">\n");
	return 0;
}
반응형