[1158] 조세퍼스 문제

less than 1 minute read

풀이

N번째 값을 만날 때까지 front에 있는 값을 pop해서 back에 push 하면 된다.

내 풀이

Queue 두 개 사용해서 출력 편하게 하기. 시간은 더 오래걸림.

#include <cstdio>
#include <iostream>
#include <queue>

using namespace std;
int n,m;

queue<int> q;
queue<int> out;

int main(void) {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		q.push(i);
	}

	while (!q.empty()) {
		for (int j = 0; j < m - 1; j++) {
			q.push(q.front());
			q.pop();
		}
		out.push(q.front());
		q.pop();
	}
	printf("<");
	while (out.size() != 1) {
		printf("%d, ", out.front());
		out.pop();
	}
	printf("%d> ", out.front());
	return 0;
}

백준님 풀이

Queue 하나만 사용하기

#include <cstdio>
#include <iostream>
#include <queue>

using namespace std;
int n,m;

queue<int> q;
int main(void) {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		q.push(i);
	}

	printf("<");
	for (int i = 0; i < n - 1; i++) {
		for (int j = 0; j < m - 1; j++) {
			q.push(q.front());
			q.pop();
		}
		printf("%d, ", q.front());
		q.pop();
	}
	printf("%d>", q.front());
	return 0;
}

Tags:

Categories:

Updated: