[BOJ] 11866 "요세푸스 문제0" 문제 풀이 & 소스 코드 With C/C++

반응형
반응형

#INFO

난이도 : SIVLER4

알고리즘 유형 : DataStructure_QUEUE

출처 : 11866번: 요세푸스 문제 0 (acmicpc.net)

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net


#SOLVE

큐 자료구조를 이용하면 간단하게 풀이 가능한 문제 였습니다. 입력받은 N까지의 수를 QUEUE 에 PUSH한 뒤, K번째 사람이면 pop을 하고 K번째 사람이 아니라면 pop 한 뒤, 다시 뒤에서 push 해 줍니다.

	while(!q.empty()) {
		if (cnt % K == 0) {
			int ans = q.front();
			q.pop();
			if (q.empty()) { cout << ans << ">"; }
			else { cout << ans << ", ";}
		}
		else {
			int tmp = q.front();
			q.pop();
			q.push(tmp);
		}
		cnt++;
	}

#CODE

#include <iostream>
#include <queue>
using namespace std;

int main(int argc, char* argv[]){
	int N, K;
	cin >> N >> K;
	queue<int> q;
	for (int i = 1 ; i <= N; i++) {
		q.push(i);
	}
	cout << "<";
	int cnt = 1;
	while(!q.empty()) {
		if (cnt % K == 0) {
			int ans = q.front();
			q.pop();
			if (q.empty()) { cout << ans << ">"; }
			else { cout << ans << ", ";}
		}
		else {
			int tmp = q.front();
			q.pop();
			q.push(tmp);
		}
		cnt++;
	}
	return 0;
}

반응형

댓글

Designed by JB FACTORY