백준 문제풀이 1158번 요세푸스 문제(C++)
2024. 4. 30. 15:22ㆍ백준문제풀이
https://www.acmicpc.net/problem/1158
큐를 사용해서 푼 문제
#include<iostream>
#include<queue>
using namespace std;
int main() {
int k, n;
queue<int> q1, q2;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
q1.push(i);
}
while (true)
{
if (q1.empty()) {
break;
}
int temp;
for (int i = 0; i < k - 1; i++) {
temp = q1.front();
q1.pop();
q1.push(temp);
}
q2.push(q1.front());
q1.pop();
}
cout << "<";
for (int i = 0; i < n; i++) {
if (i == n - 1) {
cout << q2.front() << ">";
}
else {
cout << q2.front()<<", ";
q2.pop();
}
}
}
연결리스트를 사용해서 푼 문제
#include<iostream>
#include<list>
using namespace std;
int main() {
int k, n;
list<int> circlelist;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
circlelist.push_back(i);
}
list<int> ::iterator target = circlelist.begin();
cout << "<";
while (n>0)
{
for (int i = 1; i < k; i++) {
target++;
if (target == circlelist.end())target = circlelist.begin();
}
if (n == 1) {
cout << *target;
break;
}
cout << *target << ", ";
n--;
target = circlelist.erase(target);
if (target == circlelist.end())target = circlelist.begin();
}
cout << ">";
}
'백준문제풀이' 카테고리의 다른 글
백준 문제풀이 9012번 괄호 문제(C++) (0) | 2024.04.30 |
---|---|
백준 문제풀이 2164번 카드 2 문제(C++) (0) | 2024.04.30 |
백준 문제풀이 1075번 나누기(C++) (0) | 2024.03.11 |