Post

Baekjoon1158-요세푸스 문제

백준 사이트 1158 - 요세푸스 문제 문제입니다.


1. 문제

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


2. Input , Output


3. 분류 및 난이도

자료구조 문제입니다.
queue를 이용하면 쉽게 풀 수 있습니다.
백준에서는 Sliver5의 난이도를 책정하였습니다.


4. 생각한 것들

  • 입력크기는 5000으로 작아서 신경쓰지 않았습니다.
  • queue에서의 연산이 얼마나 오래걸릴지 몰라 일단 단순하게 풀었는데, sliver5의 난이도라 그런지 효율성면에서 오류가 나지 않았습니다.
  • k인 경우에 pop을해줘서 출력해주고 아닌 경우에는 pop하고 뒤에다 추가하는 방식으로 구하였습니다.

5. code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
#include<queue>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	queue<int> q;
	int n, k;
	
	cin >> n >> k;
	int temp = 1;
	int input = 0;
	for (int i = 1; i <= n; ++i)
	{
		q.push(i);
	}
	cout << '<';
	while (!q.empty())
	{
		if (temp == k)
		{
			temp = 0;
			input = q.front();
			q.pop();
			if (q.size() != 0)
				cout << input << ", ";
			else
				cout << input;
		}
		else
		{
			input = q.front();
			q.pop();
			q.push(input);
		}
		++temp;
	}
	cout << '>';

	return 0;
}

6. 후기

옛날에 풀어본 기억 덕에 풀 수 있었습니다.

This post is licensed under CC BY 4.0 by the author.