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;
bool s[1001] = { false };
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, K;
cin >> N >> K;
queue<int> q;
int c = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < K; j++)
{
c++;
if (c > N)
{
c -= N;
}
while (s[c] == true)
{
c++;
if (c > N)
{
c -= N;
}
}
if (c > N)
{
c -= N;
}
}
q.push(c);
s[c] = true;
}
cout << "<";
while(!q.empty())
{
cout << q.front();
if (q.size() != 1)
{
cout << ", ";
}
q.pop();
}
cout << ">";
}
만약 4까지 있다면 탐색을 1 -> 2 -> 3 -> 4로 끝내는게 아닌 원형 방식으로 1 -> 2 -> 3 -> 4 -> 1 같이 회전하며 탐색하게 한다.
가운데 N을 넘겼을때 예외처리하는 부분인데 처음에 하나만 있었다가 계속 틀리는게 화나서 결국 복사해서 여기저기 넣으니 통과했다.
나중에 깔끔하게 개선을 해야할 것 같다.
'코딩 > 문제' 카테고리의 다른 글
백준 2164 카드2 (0) | 2022.06.28 |
---|---|
백준 17298 오큰수 (0) | 2022.06.28 |
백준 18258 큐2 (0) | 2022.06.28 |
백준 1874 스택 수열 (0) | 2022.06.28 |
백준 4949 균형잡힌 세상 (0) | 2022.06.28 |