문제 링크: https://www.hackerrank.com/challenges/absolute-permutation/problem

 

i번째 인덱스에 i-k를 넣어보고, 안되면 i+k를 넣습니다. 넣을 때는 \(i \pm k \in [1, n]\) 이어야 하고, \(i \pm k\)가 앞에서 사용되지 않았어야 합니다. 중간에 넣지 못하는 경우가 생기면 수열을 못만드는 것입니다.

#pragma GCC optimize ("Ofast")

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int t;
    cin >> t;
    while (t--) {
        int n, k;
        cin >> n >> k;

        vector<bool> used(n);
        vector<int> ans;
        bool flag = true;
        for (int i = 1; i <= n && flag; ++i) {
            if (i-k>0 && i-k<=n && !used[i-k-1]) {
                ans.push_back(i - k);
                used[i-k-1] = true;
            }
            else if (i+k>0 && i+k<=n && !used[i+k-1]) {
                ans.push_back(i + k);
                used[i+k-1] = true;
            }
            else {
                flag = false;
            }
        }

        if (flag) {
            for (auto& c : ans)
                cout << c << ' ';
            cout << '\n';
        }
        else {
            cout << -1 << '\n';
        }
    }

    return 0;
}
반응형

'Online Judge > Hackerrank' 카테고리의 다른 글

[Hackerrank][C++] Queen's Attack II  (0) 2020.06.17
[Hackerrank][C++] Non-Divisible Subset  (0) 2020.06.07
[Hackerrank][C++] Equal  (2) 2020.05.26