컴굥일지

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

알고리즘/코테 문제

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

gyong 2021. 7. 11. 21:46
반응형

백준 1158 요세푸스 문제

 

문제 링크

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

문제 내용

1~N명의 사람이 원형으로 앉아있고, 순서대로 K번째 사람을 제거한다. 연속적으로 제거하기 위해 vector를 사용했다.

 

코드

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

int main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	int n, k; 
	cin >> n >> k;  //입력
	vector<int>v(n);

	for (int i = 0; i < n; i++) v[i]=i+1;

	vector<int>::iterator it;
	int index=0;

	cout << "<";
	while(v.size()>1) {
		index = (index + k - 1) % v.size(); //제거할 위치 찾기
		cout << v[index] << ", ";
		it = v.begin() + index; 
		v.erase(it);	//제거
	}
	index = (index + k - 1) % v.size();
	cout << v[index] << ">\n";

	return 0;
}

 

느낀점

C++로 알고리즘 공부를 시작한 것이 얼마되지 않아서 아직 벡터 사용법을 잘 모르겠다.
vector<int>::iterator it; 이 코드를 쓰는 것이 약간 어색했다

반응형

'알고리즘 > 코테 문제' 카테고리의 다른 글

[BOJ/백준 2993][C++] 세 부분  (0) 2021.07.11
[BOJ/백준 1008][C++] A/B  (0) 2021.07.11
[BOJ/백준 1547][C++] 공  (0) 2021.07.11
[BOJ/백준 10804][C++] 카드 역배치  (0) 2021.07.11
[BOJ/백준 15552][C++] 빠른 A+B  (0) 2021.07.11
Comments