본문 바로가기

Programming/BaekJoon

[C++] 백준 1158번 : 조세퍼스 문제


https://www.acmicpc.net/problem/1158




#include <iostream>

using namespace std;

int main() {

int n, m;

cin >> n >> m;

int *Alive = new int[n];

int *A = new int[n];    // 죽은사람 순서

fill_n(Alive, n, 0);


int N_cnt = 0, cnt = 1, flag_cnt = 0;

// 죽은사람cnt, 로테이션cnt, m번째cnt

int i = 0;

while (N_cnt != n) {

if (Alive[(cnt - 1) % n] == 0) // cnt번째에 살아있다면 

{

flag_cnt++;

if (flag_cnt == m)            // m번째라면 

{

Alive[(cnt - 1) % n] = 1;  // cnt번째 사람 kill

N_cnt++;               // 죽은사람 cnt

flag_cnt = 0;          // flag_cnt 초기화

A[i++] = ((cnt-1) % n)+1 ;

}

}

cnt++;

}

cout << "<";

for (int j = 0; j < n; j++) {

cout << A[j];

if (j != n - 1)

cout << ", ";

}

cout << ">";

}