백준

[1158번] 조세퍼스 문제

2744m 2019. 3. 15. 19:44
1158번: 조세퍼스 문제
 
www.acmicpc.net
/*1158번 조세퍼스 문제*/
#include <iostream>
#include <vector>
using namespace std;
vector<int>V;
int N, M;
int main() {
	ios::sync_with_stdio(0), cin.tie(0);
	cin >> N >> M;
	for (int i = 1; i <= N; i++) V.push_back(i);
	int curr = M - 1;
	cout << '<';
	while (V.size() > 1) {
		cout << V[curr] << ", ";
		V.erase(V.begin() + curr);
		if (V.size() == 0) break;
		curr = (curr + M - 1) % V.size();//다음 위치 구하기
	}
	cout << V[0] << '>';
}

 

이 문제는 벡터를 이용해서 M의 배수에 해당하는 위치를 지워가면 된다.

curr이 벡터의 사이즈를 넘으면 다시 앞으로 되돌려 보내기 위해 벡터의 사이즈 만큼 나눠 나머지 값을 활용한다. 

한가지 주의점은 출력에 < 와 ,가 들어가는 만큼 신경써서 출력을 해줘야하는데 

나는 원소가 N, M의 값이 1일 때를 생각하지 않고 작성을 해서 계속 오답처리가 되었다.;;