알고리즘/BOJ

[백준] 12873 기념품

세진짱 2018. 7. 17. 14:51

문제를 풀다가 가끔은 문법을 몰라서 고생하는 경우가 많다

이 문제는 그냥 시물레이션을 돌리면 된다

대신 다 돌지말고 %size해서 필요한 만큼만 돈다


vector의 이터레이터를 사용하면 쉽게 풀린다

이 문제 풀면서 알아두면 좋은건 vector->erase를 했을 때 

지워지는 것의 다음 주소를 반환하는 걸 알고있으면 편하다


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
using namespace std;
#define ll long long
int n;
int main() {
    scanf(" %d"&n);
    vector<int> a(n);
    for (int i = 0; i < n; i++) a[i] = i + 1;
    auto it = a.begin();
    for (int i = 1; i < n; i++) {
        ll num = ((ll)i*i*- 1) % a.size();
        for (int j = 0; j < num; j++) {
            it++;
            if (it == a.end()) it = a.begin();
        }
        it = a.erase(it);
        if (it == a.end()) it = a.begin();
    }
    printf("%d\n", a[0]);
}
cs