티스토리 뷰
1. 문제
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
2. 문제풀이
#include <iostream>
#include <bits/stdc++.h>
#pragma warning (disable:4996)
using namespace std;
int n, k, cnt;
queue<int> q;
vector<int> ans;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
cnt = n;
for (int i = 1; i <= n; i++)
q.push(i);
while (n--) {
for (int i = 1; i < k; i++) {
q.push(q.front());
q.pop();
}
ans.push_back(q.front());
q.pop();
}
cout << '<';
for (int i = 0; i < cnt; i++) {
if (i == cnt - 1)
cout << ans[i];
else cout << ans[i] << ',' << ' ';
}
cout << '>';
}
3. 문제 평가 및 해설
이 문제는 다양한 방법으로 풀 수 있다. 대표적으로 리스트, 큐가 있는데, 나는 리스트에 굉장히 취약하기 때문에 큐로 문제를 풀었다. (원형 리스트를 구현하는 것은 언제나 어렵다.. 바킹독님의 야매 연결리스트를 기회가 되면 암기해야겠다.)
큐로 구현하는 방법은 다음과 같다.
그림과 같은 과정을 N번 반복하면 된다.
순차적으로 큐를 쌓고 k번 만큼 pop해준다. 이때 pop 해준 원소들을 다시 push를 해줘야 한다.
그러면 큐 내의 출력 원소로 다가갈 수 있는데, 해당 원소를 pop해주고 정답 배열(벡터)에 넣어준다.
'백준(C++) > 문제풀이' 카테고리의 다른 글
[백준 2164/C++] 카드2 (0) | 2023.07.16 |
---|---|
[백준 2493/C++] 탑 (0) | 2023.07.16 |
[백준 5397/C++] 키로거 (0) | 2023.07.14 |
[백준 3273/C++] 두 수의 합 (0) | 2023.07.14 |
[백준1475/C++] 방번호 (0) | 2023.07.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준 7576
- Render Problem
- 알고리즘 #백준 3273 #C++
- 백준 3986
- 문제 유형
- 알고리즘 정리
- 백준 2164
- C++ #알고리즘 #연결리스트
- 백준 2178
- 알고리즘 풀이
- AAR metadata 에러
- ViewBinding
- 백준 5430
- 알고리즘
- 백준 4179
- C++
- 백준 2493
- 백준 #알고리즘 풀이 #백준 1475
- C++ #알고리즘 #코딩테스트
- 백준 7569
- android studio
- 코테
- 백준 1021
- 안드로이드 스튜디오
- constraint missing 오류
- 백준 1697
- 코딩테스트
- 백준 4949
- 백준1158
- #include<bits/stdc++.h> # Visual studio #코딩테스트 꿀팁 #알고리즘 풀이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함