https://www.acmicpc.net/problem/11866
제출 코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, k, idx = 0;
cin >> n >> k;
vector<int> v;
for (int i = 1; i <= n; i++)
v.push_back(i);
cout << "<";
while(n--)
{
idx += (k - 1);
if (idx >= v.size()) idx = idx % v.size();
cout << v[idx];
if (n != 0) cout << ", ";
v.erase(v.begin() + idx);
}
cout << ">";
}
circular queue를 사용해도 되겠으나 방법이 떠오르질 않아 vector로 구현하였다
#include <iostream>
#include <queue>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, k, idx = 0;
cin >> n >> k;
queue<int> q;
for (int i = 1; i <= n; i++)
q.push(i);
cout << "<";
while(n--)
{
idx += (k - 1);
if (idx >= q.size()) idx = idx % q.size();
for (int i = 1; i < k; i++)
{
q.push(q.front());
q.pop();
}
cout << q.front();
if (n != 0) cout << ", ";
q.pop();
}
cout << ">";
}
추가로 다른 코드를 보다가 queue를 사용해 뒤로 보내기를 반복하는 방법이 있다는 것을 보고 작성한 코드이다.
queue를 이용해서 k번만큼 앞에 있던 사람을 뒤로 보내길 반복하며 타겟인 사람을 하나씩 출력하는 방식이다
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 1676] 팩토리얼 0의 개수 (0) | 2025.01.09 |
---|---|
[C++][백준 1436] 영화감독 숌 (0) | 2025.01.08 |
[C++][백준 10845] 큐 (0) | 2025.01.08 |
[C++][백준 10828] 스택 (0) | 2025.01.08 |
[C++][백준 10816] 숫자 카드2 (0) | 2025.01.07 |