티스토리 뷰

문제 링크 : https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

 

[해결 과정]

1. 원이라고 문제상에 나와있지만 사실상 일렬로 된 배열로 봐도 무방하다.

2. 자동으로 메모리 관리를 해주는 벡터 자료구조가 사용하기 용이하다고 생각.

 

나는 이것을 벡터라고 생각했는데 알고보니 큐를 이용해서 하면 된다.

 

내가 참고한 풀이

https://jaetsby.tistory.com/19

 

백준 요세푸스 문제 C++ (1158)

요즘 문제가 잘 풀리지 않는다ㅜ 이 문제 사실 조금만 고민해보면 쉽게 풀리는 문제였는데, 너무 어렵게 접근했던 것 같다. 처음 떠올린 풀이를 고집하면 이제 이런 문제로 두 시간을 소비하게

jaetsby.tistory.com

 

#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

int n, k, tmp;

queue<int> q;



int main(int argc, char* argv[]) {
	ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> n >> k;
    
    for(int i=1;i<=n;i++){
        q.push(i);
    }
    
    cout << '<';
    
    while(q.size() > 1){
        for(int i=0;i<k-1;i++){
            tmp = q.front();
            q.push(tmp);
            q.pop();
        }
        
        tmp = q.front();
        cout << tmp << ", ";
        q.pop();
    }
    
    tmp = q.front();
    
    cout << tmp << ">\n";
    
    
	
	return 0;
}
댓글