문제 링크입니다: https://www.acmicpc.net/problem/1168
Algospot JOSEPHUS(https://jaimemin.tistory.com/554)와 동일한 문제였습니다.
시간 복잡도를 단축시키기 위해 (M - 1)번 포인터를 옮기는 대신 모듈러 연산을 통해 포인터를 옮겼습니다.
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, M;
cin >> N >> M;
vector<int> v;
for (int i = 1; i <= N; i++)
v.push_back(i);
int cur = M - 1;
int copyN = N;
cout << "<";
for (int i = 0; i < N; i++)
{
cout << v[cur];
if (i == N - 1)
cout << ">\n";
else
cout << ", ";
v.erase(v.begin() + cur);
cur += (M - 1);
//copyN명이 남아있을 때 N번 포인터를 옮기면 결국 자기 자신으로 돌아온다
if (--copyN > 0)
cur %= copyN;
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 16723번 원영이는 ZOAC와 영원하고 싶다 (2) | 2019.02.09 |
---|---|
백준 6523번 조세퍼스 한 번 더! (0) | 2019.02.08 |
백준 16507번 어두운 건 무서워 (0) | 2019.02.08 |
백준 10986번 나머지 합 (0) | 2019.02.08 |
백준 10211번 Maximum Subarray (0) | 2019.02.08 |