본문 바로가기
백준 코딩테스트/실버

1158) 요세푸스 문제 (C++)

by xortl98 2022. 6. 3.
728x90

출처 

https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 내 풀이 

#include<iostream>
#include<queue>

using namespace std;

queue<int>q;
int N = 0, K = 0;

int main()
{
	cin >> N >> K;

	for (int i = 1; i <= N; i++)
	{
		q.push(i);
	}

	cout << "<";

	while (!q.empty())
	{
		for (int i = 0; i < K-1; i++)
		{		
			int cnt_num = q.front();
			q.pop();
			q.push(cnt_num);
		}
		if (q.size() == 1)
		{
			cout << q.front();
			q.pop();
		}
		else
		{
			int cnt_num = q.front();
			cout << cnt_num << ", ";
			q.pop();
		}

	}

	cout << ">";
}

 해설

먼저 1~N만큼의 수를 큐에 대입해주고 난 뒤 while문 안에서 for문으로 K-1번만큼 pop, push를 반복한 뒤 K번째 값을 출력하고 빼주는 걸 큐가 empty할때까지 반복하였다.

 느낀점 

Good

'백준 코딩테스트 > 실버' 카테고리의 다른 글

1057) 토너먼트 (C++)  (0) 2022.06.05
11931) 수 정렬하기 4 (C++)  (0) 2022.06.03
2960) 에라토스테네스의 체 (C++)  (0) 2022.06.01
11659) 구간 합 구하기 4 (C++)  (0) 2022.05.25
3036) 링 (C++)  (0) 2022.05.24