티스토리 뷰
문제
20301번: 반전 요세푸스
첫째 줄에 정수 $N$, $K$, $M$이 주어진다. ($1 \leq N \leq 5\ 000$, $1 \leq K, M \leq N$)
www.acmicpc.net
풀이
기존의 요세푸스 문제는 항상 원소가 제거되는 방향이 앞에서 뒤로 일정하여 큐를 사용할 수 있었지만, 이 문제에선 반대 방향도 존재하기때문에 편의를 위해 덱을 사용하여 해결할 수 있습니다. (물론 큐를 사용하여 방향이 바뀔 때마다 큐를 역순으로 바꿔서 해결할 수도 있습니다.)
1. 방향과 상관없이 앞에서 뒤(뒤에서 앞)으로 k번째 사람을 제거하므로 k - 1번 사람을 뒤로 넘기거나 앞으로 넘겨주고 k번 사람을 제거합니다.
2. 그렇게 제거한 사람의 수가 M이 될 때마다 방향을 바꿔주면 됩니다.
풀이
#include <bits/stdc++.h>
using namespace std;
int n, m, k, die, cnt;
bool r;
deque<int> dq;
int main() {
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> k >> m;
for (int i = 1; i <= n; i++) dq.emplace_back(i);
while (!dq.empty()) {
cnt = k - 1;
if (!r) {
while (cnt--) {
dq.emplace_back(dq.front());
dq.pop_front();
}
cout << dq.front() << '\n';
dq.pop_front();
}
else {
while (cnt--) {
dq.emplace_front(dq.back());
dq.pop_back();
}
cout << dq.back() << '\n';
dq.pop_back();
}
if (m == ++die) r = 1 - r, die = 0;
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준 17404] RGB 거리 2 (0) | 2020.12.11 |
---|---|
[백준 20302] 민트 초코 (0) | 2020.12.11 |
[백준 20300] 서강근육맨 (0) | 2020.12.11 |
[백준 20291] 파일 정리 (0) | 2020.12.11 |
[백준 20168, 20182, 20183] 골목 대장 호석 - 기능성, 효율성 (0) | 2020.12.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 2020 KAKAO BLIND RECRUITMENT
- 카카오 2020 인턴십
- 유니온파인드
- 2022 카카오블라인드
- 파싱
- 게임이론
- 2022 KAKAO BLIND RECRUITMENT
- 카카오 인턴십
- 프로그래머스
- 2021 KAKAO BLIND
- 시뮬레이션
- 카카오 표 편집
- 2022 카카오 블라인드 코딩테스트
- 동적계획법
- 구현
- 카카오 2차코딩테스트
- 이분탐색
- 트리
- Kakaoblind
- 프로그래머스 월간코드챌린지
- 백준
- 카카오 2021
- DP
- 누적합
- 2021 카카오 블라인드
- 표 편집
- 위클리 챌린지
- 투포인터
- 프로그래머스 위클리 9주차
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함