IDEA
옛날에 비슷한 문제를 풀었어서 기억이 생생하다. 원형 큐였나 그런 걸 사용하면 된다했는데 그런 건 모른다.
그냥 오로지 큐로 풀었다.
순서를 세면서 내가 원하는 순서가 아니라면 pop한 후 push해서 뒤로 보내버리면 된다.
1번부터 시작이기떄문에 count = 1로 설정해둔다.
1. 내가 원하는 순서가 아닌 경우
front값을 저장한 후 pop , push를 통해 뒤로 보내버린다. count번째 사람이기에 그 다음 사람을 위해 count를 하나 세준다.
2. 내가 원하는 순서인 경우
count == k일 때다. 이 때는 front 값을 다른 answer라는 벡터에 저장한 후, pop을 통해 빼버린다.
이 사람이 빠지고 난 후 다시 1번째사람부터 시작해 k번째 사람을 찾아야하므로 count = 1로 다시 초기화해준다.
코드
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
int n, k;
scanf("%d %d", &n, &k);
queue<int>q;
vector<int>answer;
for (int i = 1; i <= n; i++) q.push(i);
int count = 1;
while (q.size() > 1) {
if (count == k) {
answer.push_back(q.front());
q.pop();
count = 1;
}
else {
int num = q.front();
q.pop();
q.push(num);
count++;
}
}
printf("<");
for (int i = 0; i < answer.size(); i++) printf("%d, ", answer[i]);
printf("%d>", q.front());
}
'알고리즘 > 백준 단계별로 풀기 (12.26 ~ 12.31)' 카테고리의 다른 글
BFS & DFS - 백준 1012번 유기농 배추 (0) | 2020.12.27 |
---|---|
큐 - 백준 1966번 프린터 큐 (0) | 2020.12.27 |
큐 - 백준 2164번 카드2 (0) | 2020.12.27 |
스택 - 백준 4949번 균형잡힌 세상 (0) | 2020.12.27 |
브루트포스 - 백준 7568번 덩치 (0) | 2020.12.26 |