-
백준 1158 조세퍼스 문제 [C++]알고리즘 2018. 11. 25. 22:08
문제 링크 : https://www.acmicpc.net/problem/1158
소스코드
#include <iostream>#include <vector>using namespace std;int main() {vector<int> v;int N, M;cin >> N >> M;for (int i = 1; i <= N; ++i)v.push_back(i);vector<int>::iterator it;it = v.begin();cout << "<";while (v.size() != 1) {for (int i = 0; i < M-1; ++i) {++it;if (it == v.end())it = v.begin();}cout << *it<<", ";it = v.erase(it);if (it == v.end())it = v.begin();}cout << *it<<">";}처음과 끝이 연결되었다고 생각하면 쉽게 풀 수 있습니다.
입력 받은 M만큼 배열의 인덱스를 증가시켜 출력하고, 인덱스가 배열의 마지막에 다다르면 처음으로 바꿔줍니다.
원형 큐의 개념을 사용하였습니다.
while문의 조건문에서 0이 아니라 1인 이유는 출력 형식을 맞추기 위해 마지막 숫자는 다르게 출력하기 위함입니다.
'알고리즘' 카테고리의 다른 글
백준 1021 회전하는 큐 [C++] (0) 2018.11.25 백준 10866 덱 [C++] (0) 2018.11.25 백준 1966 프린터 큐 [C++] (0) 2018.11.25 백준 10845 큐 [C++] (0) 2018.11.25 백준 1874 스택 수열 [C++] (0) 2018.11.25