본문 바로가기
Baekjoon/[Code.plus] 알고리즘 기초 1/2

[BOJ/백준] 1158 요세푸스 문제

by 해적거북 2021. 7. 26.
728x90

● [문제번호 1158] 요세푸스 문제

https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

 

● 알아야 할 것

: list 자료구조와 메소드

 

● 풀이 과정

: 주된 작업이 삭제 연산이므로 list로 구현

: 노드가 1개 남을 때 까지 재귀

: K 번째로 이동 -> 삭제 -> ( list.end()인 경우 처음으로 옮기기 ) -> 재귀

 

● 주의 할 것

: K 번째 이지만 이동 횟수는 K-1 임

: 삭제한 다음 iterator가 list.end()를 가리킬 수 있음

● 참고 할 것

: NULL

 

● 풀이 코드

#include <bits/stdc++.h>

using namespace std;

// 삭제 작업이 많기에 list로 구현
list<int> l;
list<int>::iterator it;
int N, K;

void josephus()
{
    // 노드가 1개 남으면 출력하고 종료
    if(l.size() == 1)
    {
        cout << l.front();
        return ;
    }
    
    // k번째 이므로 k-1번 이동
    for(int k = 0; k < K - 1; k++)
    {
        // 이동 후 마지막인 경우 처음으로 옮기기
        it++;
        if(it == l.end())
            it = l.begin();
    }
    
    // 출력 후 삭제 작업
    cout << *it << ", ";
    it = l.erase(it);
    
    // 삭제 한 다음 노드가 끝인 경우 처음으로 옮기기
    if(it == l.end())
        it = l.begin();
    
    // 재귀 함수
    josephus();
}


int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> N >> K;
    
    // 리스트 초기화 작업
    for(int n = 1; n <= N; n++)
        l.push_back(n);
    
    // iterator 초기 설정
    it = l.begin();
    
    // 출력
    cout << "<";
    josephus();
    cout << ">";
    
    return 0;
}

 

 

● [백준] - [알고리즘 기초 1/2] - [200 - 자료구조 1] 문제집

번호 문제 번호 문제 이름 풀이 링크
1 10828 스택 https://pirateturtle.tistory.com/153
2 9093 단어 뒤집기 https://pirateturtle.tistory.com/154
3 9012 괄호 https://pirateturtle.tistory.com/155
4 1874 스택 수열 https://pirateturtle.tistory.com/156
5 1406 에디터 https://pirateturtle.tistory.com/158
6 10845 https://pirateturtle.tistory.com/161
7 1158 요세푸스 문제 https://pirateturtle.tistory.com/162
8 10866 https://pirateturtle.tistory.com/164

 

728x90

'Baekjoon > [Code.plus] 알고리즘 기초 1/2' 카테고리의 다른 글

[BOJ/백준] 10799 쇠막대기  (0) 2021.07.26
[BOJ/백준] 17413 단어 뒤집기 2  (0) 2021.07.26
[BOJ/백준] 10866 덱  (0) 2021.07.26
[BOJ/백준] 10845 큐  (0) 2021.07.26
[BOJ/백준] 1406 에디터  (0) 2021.07.26
[BOJ/백준] 1874 스택 수열  (0) 2021.07.26
[BOJ/백준] 9012 괄호  (0) 2021.07.26

댓글