Search
Duplicate
📗

요세푸스 문제

주차
문제번호
1158
언어
C++
티어
실버
유형
구현
자료구조
nj_Blog
nj_상태
이해도
100%
풀이
사람
이해도 2
13 more properties

문제접근

벡터를 -1 로 초기화하고 벡터를 하나씩 순회하면서 k번째가 되었을때 출력하고 그 원소는 0, 다만 벡터 원소의 값이 0인 경우에는 k번째로 카운팅을 하지 않고 다음 진행
idx는 k번째를 출력하기 위한 변수
i는 포인터 역할

놓쳤던 부분

queue로 k번째 일때까지 계속 pop,push를 하다가 k번째에서는 front로 출력하면됨

코드

2160 KB

1924 ms

#include <iostream> #include <vector> using namespace std; int main(void) { int n,k; vector<int> p; int cnt = 0; int idx; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> k; p.resize(n, -1); cout << "<"; idx = 1; for (int i = 0; cnt < n; i = (i + 1) % n, idx++) { if (p[i] == 0) { idx--; continue ; } if (idx == k) { idx = 0; p[i] = 0; cnt++; cout << i + 1; if (cnt == n) cout << ">"; else cout << ", "; } } return (0); }
C++
복사