![[백준 C++] 11866 : 요세푸스 문제 0](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAN98j%2FbtsKOHveqPx%2FYOJCVGv1GeIlG19Uni72t0%2Fimg.png)
[백준 C++] 11866 : 요세푸스 문제 0CSE/코딩 문제풀이2024. 11. 20. 13:56
Table of Contents
https://www.acmicpc.net/problem/11866
solved.ac Class 2 에센셜에 포함되어 있는 구현 문제이다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int list[1001] = { 0, };
int N, K;
cin >> N >> K;
int idx = K;
vector<int> ans;
for (int i = 1; i <= N; i++)
list[i] = i;
while (true)
{
if (list[idx] != 0)
{
ans.push_back(idx);
list[idx] = 0;
}
if (ans.size() >= N)
break;
else
{
int move = 0;
while (move < K)
{
if (idx + 1 > N)
idx = 1;
else
idx += 1;
if (list[idx] != 0)
move++;
}
}
}
cout << '<';
for (int i = 0; i < ans.size() - 1; i++)
cout << ans.at(i) << ", ";
cout << ans.back() << ">\n";
return 0;
}
while문 안에 while문이 또 있어 시간복잡도가 좋지는 않지만, N의 최댓값이 1000이므로 시간 초과가 뜰 일은 없다.
idx를 이용하면서 방문함과 동시에 값이 0(갈 필요가 없거나, 이미 들렸거나)인지를 확인하면서 move 변수를 이용해 순차적으로 이동하였다.
'CSE > 코딩 문제풀이' 카테고리의 다른 글
[백준 C++] 1764 : 듣보잡 (0) | 2024.11.22 |
---|---|
[백준 C++] 1920 : 수 찾기 (0) | 2024.11.21 |
[백준 C++] 7562 : 나이트의 이동 (0) | 2024.11.19 |
[백준 C++] 1679 : 숨바꼭질 (0) | 2024.11.18 |
[백준 C++] 2178 : 미로 탐색 (0) | 2024.11.17 |
@NiffJB :: 개발하는 니프
CSE & GAME 개발 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다!