๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 11866๋ฒˆ: ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 0

by nitronium102 2022. 7. 31.

๋ฌธ์ œ

์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ N๋ช…์˜ ์‚ฌ๋žŒ์ด ์›์„ ์ด๋ฃจ๋ฉด์„œ ์•‰์•„์žˆ๊ณ , ์–‘์˜ ์ •์ˆ˜ K(≤ N)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด์ œ ์ˆœ์„œ๋Œ€๋กœ K๋ฒˆ์งธ ์‚ฌ๋žŒ์„ ์ œ๊ฑฐํ•œ๋‹ค. ํ•œ ์‚ฌ๋žŒ์ด ์ œ๊ฑฐ๋˜๋ฉด ๋‚จ์€ ์‚ฌ๋žŒ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์›์„ ๋”ฐ๋ผ ์ด ๊ณผ์ •์„ ๊ณ„์†ํ•ด ๋‚˜๊ฐ„๋‹ค. ์ด ๊ณผ์ •์€ N๋ช…์˜ ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋œ๋‹ค. ์›์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์ œ๊ฑฐ๋˜๋Š” ์ˆœ์„œ๋ฅผ (N, K)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (7, 3)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์€ <3, 6, 2, 7, 5, 1, 4>์ด๋‹ค.

N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง€๋ฉด (N, K)-์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ N ≤ 1,000)

์ถœ๋ ฅ

์˜ˆ์ œ์™€ ๊ฐ™์ด ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ๊ฐ ์ด๋ฃจ์–ด์ง€๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์ œ๊ฑฐํ•  ์‚ฌ๋žŒ์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ pop/push๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ k๋ฒˆ์งธ ์‚ฌ๋žŒ์„ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค!

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

vector<int> playGame(int k, queue<int> &q){
    vector<int> result; // ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด
    int cnt = 0; // ๋ช‡ ๋ฒˆ์งธ ์‚ฌ๋žŒ์ธ์ง€ ํ‘œ์‹œ
    int x;
    while(!q.empty()){
        x = q.front();
        q.pop();
        cnt++;
        if (cnt == k){ // ์‚ฌ๋žŒ ์ œ๊ฑฐ -> result ์ˆœ์—ด์— ์ถ”๊ฐ€
            result.push_back(x);
            cnt = 0;
            continue;
        }
        q.push(x);
    }
    return result;
}

int main() {
    int n, k;
    queue<int> q;

    // ์ž…๋ ฅ
    cin >> n >> k;
    for (int i=1; i<=n; i++)
        q.push(i);

    // ์—ฐ์‚ฐ
    vector<int> result = playGame(k, q);

    // ์ถœ๋ ฅ
    cout << "<";
    for (int i=0; i<result.size()-1; i++)
        cout << result[i] << ", ";
    cout << result[result.size()-1] << ">";
}

๋Œ“๊ธ€