혼자 힘으로 풀지 못했다.
퍼포먼스를 만족키지 못했는데
다른 사람들의 풀이를 참조해서 vector의 erase를 사용하면 된다는 걸 알았다.
(erase는 memmove로 구현해서 매우, 매우 빠르다고 한다)
하지만 이 문제는 세그먼트 트리를 사용하라는 목적으로 만든 것 같다.
세그먼트 트리를 알아보자...
#include <iostream>
#include <vector>
int main(void) {
int len, term;
std::cin >> len >> term;
std::vector<int> arr(len);
for (int i = 0; i < len; i++) {
arr[i] = i + 1;
}
int pos = -1;
std::cout << "<";
while (true) {
pos = (pos + term) % arr.size();
std::cout << arr[pos];
if (arr.size() == 1) {
std::cout << ">";
break;
}
std::cout << ", ";
arr.erase(arr.begin() + pos--);
}
return 0;
}
|
cs |
'problem solving' 카테고리의 다른 글
1208번: 부분수열의 합2 (0) | 2020.02.20 |
---|---|
1182번: 부분수열의 합 (0) | 2020.02.20 |
1167번: 트리의 지름 (0) | 2020.02.19 |
1149번: RGB거리 (0) | 2020.02.19 |
1021번: 회전하는 큐 (0) | 2020.02.19 |