이우의 개발일지
[백준/C++] 1158번 요세푸스 문제 [1] 본문
백준 1158번 요세푸스 문제
https://www.acmicpc.net/problem/1158
문제 풀이
이 문제는 수학 규칙대로 풀려고 하니 굉장히 복잡한 난이도를 가졌다.
내가 체크한 숫자를 빼고 다음 숫자들을 당겨서 순환을 돌릴 수 있으면 best지만, 그건 어려워보였다.
이 문제는 deque를 이용해서 풀었다.
deque의 특성상 앞뒤 push, pop이 둘 다 가능하기때문에 넣고빼기가 유용하다.
K번째의 순서까지 front에 있는 수를 qu.push_back(qu.front()); 이렇게 해주어 맨 뒤로 넣어주고, 우리가 빼야할 수를 결국에 맨 앞에 넣어주어 qu.pop_front()를 해주었다.
#include <iostream>
#include<deque>
using namespace std;
int main() {
int N, K;
cin >> N >> K;
int plu = 0, point = 0;
deque<int> qu;
bool che[5000];
for (int i = 1; i <= N; i++) {
qu.push_back(i);
}
while (qu.size() > 0) {
for (int i = 1; i < K; i++) {
qu.push_back(qu.front());
qu.pop_front();
}
if (N == 1) {
cout << "<" << 1 << ">";
break;
}
if (qu.size() == N) cout << "<" << qu.front() << ", ";
else if (qu.size() == 1) cout << qu.front() << ">";
else cout << qu.front() << ", ";
qu.pop_front();
}
return 0;
}
반응형
'Coding' 카테고리의 다른 글
[프로그래머스/C++] PCCP 기출문제 1번 / 붕대 감기 (0) | 2024.05.18 |
---|---|
[백준/C++] 2563번 색종이 (0) | 2024.05.17 |
[백준/C++] 10773번 제로 (0) | 2024.05.16 |
[백준/C++] 1193번 분수찾기 코딩 (0) | 2024.05.15 |
[백준/C++] 2941번 크로아티아 알파벳 (0) | 2024.05.15 |