문제

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

걸린 시간

01 : 46 : 53

풀이

C++

#include <bits/stdc++.h>
#define INF 987654321
typedef long long ll;
using namespace std;

int n, m, v, k;
vector<int> c;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m >> v;
    c.resize(n);
    for(int& i : c) cin >> i;
    for(int i = 0; i < m; i++){
        cin >> k;
        if(k <= v-1)
            cout << c[k] << "\n";
        else
            cout << c[(v-1)+((k-(v-1))%(n-v+1))] << "\n";
    }
    return 0;
}

올바른 수식을 만들어야 하는 수학 문제이다.

풀이에 시간이 많이 걸렸는데 다음과 같은 습관들을 들인다면 시간을 줄여 나갈 수 있을 것 같다.

  1. 문제의 설명과 구현에서 인덱스 차이가 나지 않도록 수정하고 시작하기.
  2. 작은 테스트 케이스를 손으로 풀어보고 올바른 결과값으로부터 수식 유추하기.
  3. 선형 그래프로 나타내어 문제 단순화하기.

댓글