Notice
Recent Posts
Link
«   2024/11   »
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
Archives
관리 메뉴

이우의 개발일지

[백준/C++] 1158번 요세푸스 문제 [1] 본문

Coding

[백준/C++] 1158번 요세푸스 문제 [1]

공대이우 2024. 5. 17. 21:14

백준 1158번 요세푸스 문제

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

 

 

문제 풀이

이 문제는 수학 규칙대로 풀려고 하니 굉장히 복잡한 난이도를 가졌다.

내가 체크한 숫자를 빼고 다음 숫자들을 당겨서 순환을 돌릴 수 있으면 best지만, 그건 어려워보였다.

 

이 문제는 deque를 이용해서 풀었다.

deque의 특성상 앞뒤 push, pop이 둘 다 가능하기때문에 넣고빼기가 유용하다.

K번째의 순서까지 front에 있는 수를 qu.push_back(qu.front()); 이렇게 해주어 맨 뒤로 넣어주고, 우리가 빼야할 수를 결국에 맨 앞에 넣어주어 qu.pop_front()를 해주었다. 

#include <iostream>
#include<deque>

using namespace std;
int main() {
	int N, K;
	cin >> N >> K;
	int plu = 0, point = 0;
	deque<int> qu;
	bool che[5000];
	for (int i = 1; i <= N; i++) {
		qu.push_back(i);
	}
	while (qu.size() > 0) {
		for (int i = 1; i < K; i++) {
			qu.push_back(qu.front());
			qu.pop_front();
		}
		if (N == 1) {
			cout << "<" << 1 << ">";
			break;
		}
		if (qu.size() == N) cout << "<" << qu.front() << ", ";
		else if (qu.size() == 1) cout << qu.front() << ">";
		else cout << qu.front() << ", ";
		qu.pop_front();
		

	}
	
	
	return 0;
}

 

 

반응형