개발자일걸요..?

11866 요세푸스 문제0 본문

알고리즘코딩/Baekjoon Online Judge

11866 요세푸스 문제0

Re_A 2021. 2. 25. 09:17
728x90
반응형

문제링크 : www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 



<알고리즘>

  1) vector를 이용해 1~N까지의 숫자를 나열(1~N까지의 숫자를 0~N-1칸에 배열)

  2) index = K-1로 시작해 vector[index]값을 요세푸스 순열에 추가

  3) 이미 요세푸스 순열에 추가된 vector[index]값은 삭제

  4) index를 K-1값(도착지점 포함 K칸이니까)만큼 증가시키는데 배열의 size를 넘지않게 주의

  5) vector의 요소가 1개 남을 때까지(index변경 수식에서 zero division발생 방지) 2~4과정 반복

  6) 하나 남은 vector 요소를 요세푸스 순열에 추가

  7) 문제에서 요구하는 형식에 맞춰 queue 출력, pop 반복

 

 

 

메모리 : 2016KB       시간 : 0ms

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int main() {
	int N = 0;
	int K = 0;
	cin >> N >> K;

	vector<int> member(N);
	for (int i = 1; i <= N; i++) { member[i - 1] = i; }
	queue <int> result;
	
	int index = K - 1;
	for (int i = 0; i < N; i++) {
		result.push(member[index]);
		member.erase(member.begin() + index);
		if (member.size() >1) {
			index = (index + K - 1 >= member.size()) ? (index + K - 1) % member.size() : (index + K - 1);
		}
		else {
			index = 0;
		}
	}

	cout << "<";
	while(result.size()>1){
		cout << result.front() << ", ";
		result.pop();
	}
	cout << result.front() << ">";
	return 0;
}
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

10866번 덱  (0) 2021.02.26
1966번 프린트 큐  (0) 2021.02.25
2164번 카드2  (0) 2021.02.24
18258번 큐2  (0) 2021.02.24
17298번 오큰수  (0) 2021.02.23
Comments