Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- std::vector
- c++ basic practice
- placement new
- virtual function table
- suffix return type
- increment operator
- base from member
- 더 지니어스 양면포커
- member function pointer
- dynamic_cast
- std::endl
- virtual inheritance
- std::ostream
- delete function
- virtual destructor
- vector size
- this call
- discord bot
- std::cout
- c++ multi chatting room
- vector capacity
- virtual function
- return by reference
- conversion constructor
- C++
- new&delete
- diamond inheritance
- constructor
- operator overloading
- pointer to member data
Archives
- Today
- Total
I'm FanJae.
[BOJ] 1158 요세푸스 문제 (C++) 본문
1. 문제 링크
https://www.acmicpc.net/problem/1158
2. 문제 접근
- 문제를 이해하는 것은 어렵지 않다.
- 처음에 모든 인원을 삽입해주고, 중간 삭제를 위해서 list 등을 이용한 처리가 적합하다.
3. 문제 풀이
- std::list를 이용해서 전체를 모두 넣어준다.
- list에 대한 iterator를 순환 시켜서 계속 돌린다.
- 이후, k번째에 해당하는 경우 삭제하고, 아닌 경우 다음 사람으로 넘어간다. (iterator값 증가)
- 유의할 점은, 삭제된 이후 시점에 가리키는 요소나 다음 사람으로 넘어갈때 요소가 끝인 경우 처음으로 되돌린다.
4. 소스 코드(C++)
더보기
더보기
#include <iostream>
#include <list>
using namespace std;
int main(void)
{
int n, k;
int cnt = 1;
list <int> josephus;
list <int>::iterator iter;
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
josephus.push_back(i);
}
iter = josephus.begin();
while (!josephus.empty())
{
if (cnt == k) // k번째에 해당하는 경우
{
cnt = 1;
if (josephus.size() == n)
{
cout << "<";
}
if (josephus.size() > 1) // 1개 이상인 경우 출력할 값이 더있음.
{
cout << *iter << ", ";
}
else
{
cout << *iter << ">";
}
iter = josephus.erase(iter);
if (iter == josephus.end()) // 끝 도달한 경우 다시 맨 앞 이동
{
iter = josephus.begin();
}
}
else
{
iter++;
cnt++;
if (iter == josephus.end()) // 끝 도달한 경우 다시 맨 앞 이동
{
iter = josephus.begin();
}
}
}
}
'Algorithm' 카테고리의 다른 글
[BOJ] 2493 탑 (C++) (0) | 2024.10.29 |
---|---|
[BOJ] 1874 스택 수열 (C++) (0) | 2024.10.29 |
[BOJ] 10773 제로 (C++) (0) | 2024.10.28 |
[BOJ] 5397 키로거 (C++) (0) | 2024.10.28 |
[BOJ] 1406 에디터 (C++) (0) | 2024.10.28 |
Comments