알고리즘/BOJ

백준 1168번 조세퍼스 문제 2

꾸준함. 2019. 2. 8. 03:51

문제 링크입니다: 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


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형