๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Gold

[BOJ] 20055 : ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

by Jaeguk 2022. 5. 23.
๋ฌธ์ œ ๋งํฌ

20055๋ฒˆ: ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡ (acmicpc.net)

 

20055๋ฒˆ: ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

๊ธธ์ด๊ฐ€ N์ธ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๊ฐ€ ์žˆ๊ณ , ๊ธธ์ด๊ฐ€ 2N์ธ ๋ฒจํŠธ๊ฐ€ ์ด ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ์œ„์•„๋ž˜๋กœ ๊ฐ์‹ธ๋ฉฐ ๋Œ๊ณ  ์žˆ๋‹ค. ๋ฒจํŠธ๋Š” ๊ธธ์ด 1 ๊ฐ„๊ฒฉ์œผ๋กœ 2N๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์นธ์—๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 1๋ถ€

www.acmicpc.net

์ปจ๋ฒ ์ด์–ด์˜ ํšŒ์ „์„ ๊ตฌํ˜„ํ•ด์„œ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์ด K๊ฐœ ์ด์ƒ ์ƒ๊ฒผ์„ ๋•Œ ์ˆ˜ํ–‰์ค‘์ด๋˜ ๋‹จ๊ณ„๊ฐ€ ๋ช‡ ๋‹จ๊ณ„์ธ์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

ํ’€์ด

 ์ปจ๋ฒ ์ด์–ด๋Š” ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ 1๋ถ€ํ„ฐ 2N๋ฒˆ์งธ๊นŒ์ง€ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ณ , 1๋ฒˆ ์นธ์„ "์˜ฌ๋ฆฌ๋Š” ์œ„์น˜" ์ฆ‰, ์ƒˆ๋กœ์šด ๋กœ๋ด‡์„ ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์ด๊ณ , N๋ฒˆ ์นธ์„ "๋‚ด๋ฆฌ๋Š” ์œ„์น˜" , ๋กœ๋ด‡์ด ๋‚ด๋ ค์˜ค๋Š” ์œ„์น˜์ด๋‹ค.

 ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์˜ ๊ฐ ์นธ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

1. 2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ์œ—์ค„(1 ~ N), ์•„๋žซ์ค„(N+1 ~ 2N)์„ ํ‘œํ˜„ํ•œ๋‹ค.

2. 1์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ 1 ~ 2N๊นŒ์ง€ ํ‘œํ˜„ํ•œ๋‹ค.

3. ๋ฑ์„ ์ด์šฉํ•ด์„œ 1 ~ 2N๊นŒ์ง€ ํ‘œํ˜„ํ•œ๋‹ค.

 ์…‹ ์ค‘์—์„œ ํšŒ์ „์„ ํ‘œํ˜„ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ์‹์€ 3๋ฒˆ ๋ฑ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋‚˜๋Š” ์ƒ๊ฐํ–ˆ๋‹ค.

๋ฑ์€ ํ์™€ ๋น„์Šทํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด์ง€๋งŒ ์•ž ๋’ค ๋ชจ๋‘์—์„œ ๊ฐ’์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ํšŒ์ „์„ ํ‘œํ˜„ํ•˜๊ธฐ ์‰ฝ๋‹ค.

๋ฑ์˜ ๋งจ ๋’ค์—์„œ ๊ฐ’์„ ๊บผ๋‚ด์„œ ๋ฑ์˜ ๋งจ ์•ž์นธ์— ๋„ฃ์–ด์ฃผ๋ฉด ํ•œ ์นธ์”ฉ ํšŒ์ „ํ•œ ํ›„์˜ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ์ตœ์†Œํ•œ์œผ๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋Š” ์„ธ๊ฐ€์ง€ ์ •๋„๊ฐ€ ๋˜๊ฒ ๋‹ค.

  • ํ•ด๋‹น ์นธ์— ๋กœ๋ด‡์ด ์ด๋ฏธ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด(โ‘ )
  • ํ•ด๋‹น ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ ์–ผ๋งˆ์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด(โ‘ก)
  • ํ˜„์žฌ ๋กœ๋ด‡๋“ค์˜ ์œ„์น˜์— ๋Œ€ํ•œ ์ •๋ณด(โ‘ข)

๋กœ๋ด‡์ด ์ด๋™ํ•˜๋ ค๋ฉด ์ด๋™ํ•˜๋ ค๋Š” ์นธ์— ๋กœ๋ด‡์ด ์žˆ์œผ๋ฉด ์•ˆ๋˜๊ณ  ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ด์–ด์•ผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋กœ๋ด‡์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋™์‹œ์ผœ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋ด‡์˜ ์œ„์น˜๋ฅผ ์˜ฌ๋ ค์ง„ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•ด ๋‘์–ด์•ผํ•œ๋‹ค.

์ปจ๋ฒ ์ด์–ด ๊ฐ ์นธ๋งˆ๋‹ค ๋กœ๋ด‡์˜ ์œ ๋ฌด์™€ ๋‚ด๊ตฌ๋„๋Š” ์ปจ๋ฒ ์ด์–ด๊ฐ€ ํšŒ์ „ํ•จ์— ๋”ฐ๋ผ ๊ฐ™์ด ํšŒ์ „ํ•ด์•ผํ•˜๋ฏ€๋กœ ์•ž์—์„œ ๋งํ•œ๋Œ€๋กœ ๋ฑ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ •๋ณด๋ฅผ ์ €์žฅํ–ˆ๋‹ค.

 1. ์ปจ๋ฒ ์ด์–ด์˜ ํšŒ์ „

์ปจ๋ฒ ์ด์–ด์˜ ํšŒ์ „์€ ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด ๋ฑ์˜ ํŠน์„ฑ์„ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ โ‘ , โ‘ก ,โ‘ข ๋ฒˆ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผํ•œ๋‹ค. โ‘ , โ‘ก๋ฒˆ์€ ๋‹จ์ˆœํžˆ ๊ทธ๋ƒฅ ํ•œ ์นธ์”ฉ ํšŒ์ „ ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

โ‘ข๋ฒˆ์€ ๋ชจ๋“  ๋กœ๋ด‡์˜ ์œ„์น˜๋ฅผ +1 ์‹œ์ผœ์ฃผ๊ณ  ๋งŒ์•ฝ 2N๋ฒˆ์งธ ๋กœ๋ด‡์€ 2N+1๋กœ ์ด๋™ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ 1๋ฒˆ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” ๋ฐฐ์—ด์ด ์•„๋‹Œ ๋ฑ์œผ๋กœ ํ‘œํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ์— ์žˆ๋Š” ์‚ฌ์ง„์—์„œ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์ž‘๊ฒŒ ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค. 0๋ฒˆ์ด ์‹œ์ž‘ ์ธ๋ฑ์Šค์ด๊ณ  2N-1์ด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์ด๋‹ค.

๋กœ๋ด‡์ด 2N๋ฒˆ์งธ ์นธ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด 0๋ฒˆ ์นธ์œผ๋กœ ์ด๋™์‹œ์ผœ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋กœ๋ด‡์ด ์ด๋™ํ–ˆ์„ ๋•Œ N-1 ๋ฒˆ์งธ ์นธ. ์ฆ‰ "๋‚ด๋ฆฌ๋Š” ์œ„์น˜"๋ผ๋ฉด ๋กœ๋ด‡์„ ๋‚ด๋ ค์ค€๋‹ค. ์ด๋•Œ N-1๋ฒˆ์งธ ์นธ์˜ ๋กœ๋ด‡์˜ ์œ ๋ฌด๋Š” '๋ฌด'๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

2. ๋กœ๋ด‡์˜ ์ด๋™

โ‘ข๋ฒˆ์— ๋กœ๋ด‡๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋‹ค. ์ด๋•Œ ์˜ฌ๋ ค์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋กœ๋ด‡๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋‘์–ด์•ผ ๋ฌธ์ œ ์กฐ๊ฑด๋Œ€๋กœ ๋กœ๋ด‡๋“ค์„ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 0๋ฒˆ ์ธ๋ฑ์Šค์— ์ œ์ผ ๋จผ์ € ์˜ฌ๋ ค์ง„ ๋กœ๋ด‡์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ–ˆ๋‹ค.

0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ํ˜„์žฌ ์˜ฌ๋ ค์ ธ์žˆ๋Š” ๋กœ๋ด‡์˜ ๊ฐœ์ˆ˜๋งŒํผ ์ธ๋ฑ์Šค๋ฅผ ๋Œ๋ฉด์„œ ๋งŒ์•ฝ ๋‹ค์Œ์นธ์— ๋กœ๋ด‡์ด ์—†๊ณ , ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ด๋ผ๋ฉด ๋กœ๋ด‡์˜ ์œ„์น˜๋ฅผ +1 ํ•ด์ฃผ๊ณ  ๋‹ค์Œ์นธ์˜ ๋‚ด๊ตฌ๋„๋ฅผ -1 ํ•ด์ฃผ์—ˆ๋‹ค.

๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์ด N-1๋ฒˆ์งธ ์นธ "๋‚ด๋ฆฌ๋Š” ์œ„์น˜"๋ผ๋ฉด ๋กœ๋ด‡์„ ๋‚ด๋ ค์•ผํ•œ๋‹ค.

3. ๋กœ๋ด‡ ์˜ฌ๋ฆฌ๊ธฐ

๋กœ๋ด‡์€ ๋ฌด์กฐ๊ฑด "์˜ฌ๋ฆฌ๋Š” ์œ„์น˜"์—๋งŒ ์˜ฌ๋ผ๊ฐ€๋ฏ€๋กœ ์ปจ๋ฒ ์ด์–ด 0๋ฒˆ ์นธ์— ๋กœ๋ด‡์„ ์˜ฌ๋ ค์ค€๋‹ค.

์ด๋•Œ 0๋ฒˆ์นธ์˜ ๋กœ๋ด‡ ์œ ๋ฌด๋ฅผ '์œ '๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , 0๋ฒˆ์นธ์˜ ๋‚ด๊ตฌ๋„๋ฅผ 1 ๊นŽ๋Š”๋‹ค.

์ƒˆ๋กœ ๋“ค์–ด์˜จ ๋กœ๋ด‡์€ โ‘ข๋ฒˆ ๋กœ๋ด‡ ์ •๋ณด๋“ค ๋งจ ๋’ค์นธ์— ์ƒˆ๋กœ์šด ๋กœ๋ด‡์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

4. ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ >= K ๋ผ๋ฉด ์ข…๋ฃŒ

๋‚ด๊ตฌ๋„์˜ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ณผ์ •์€ 2. ๋กœ๋ด‡์˜ ์ด๋™, 3. ๋กœ๋ด‡ ์˜ฌ๋ฆฌ๊ธฐ ์ด๋‹ค.

๋กœ๋ด‡์„ ์ด๋™์‹œํ‚ฌ ๋•Œ์™€ ๋กœ๋ด‡์„ ์˜ฌ๋ฆด ๋•Œ ํ•ด๋‹น ์นธ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๊นŽ์•˜์„ ๋•Œ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ด๋ฉด ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ +1 ์‹œ์ผœ์ค€๋‹ค.

๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ K์ด์ƒ์ด๋ฉด ์ข…๋ฃŒํ•˜๊ณ  ๊ทธ๋•Œ์˜ ๋‹จ๊ณ„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <deque>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef priority_queue<pair<intint>vector<pair<intint>>, greater<pair<intint>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 100 + 5;
deque<int> A;
int N, K;
deque<bool> deq;
deque<int> Robot;
int Zero = 0;
 
void rotation();
void moving();
void Add_robot();
 
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N >> K;
    for (int i = 0; i < 2 * N; i++) {
        int a;
        cin >> a;
        A.push_back(a);
    }
 
    for (int i = 0; i < 2 * N; i++)
        deq.push_back(false);
    int turn = 0;
 
    while (true) {
        turn++;
        rotation();
        moving();
        Add_robot();
        if (Zero >= K)
            break;
    }
    cout << turn << "\n";
    return 0;
}
void rotation() {
    deq.push_front(deq.back());
    deq.pop_back();
    A.push_front(A.back());
    A.pop_back();
 
    deque<int> Remain;
    int idx = -1;
    for (int i = 0; i < Robot.size(); i++) {
        Robot[i]++;
        if (Robot[i] >= 2 * N)
            Robot[i] = 0;
        if (Robot[i] == N - 1)
            idx = i;
    }
    if (idx != -1) {
        Robot.erase(Robot.begin() + idx);
        deq[N-1= false;
    }
}
 
void moving() {
    vector<int> idx;
    for (int i = 0; i < Robot.size(); i++) {
        int next = Robot[i] + 1;
        if (next >= 2 * N)
            next = 0;
        if (A[next] > 0 && !deq[next]) { //๋‹ค์Œ์นธ์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•˜๋ฉด
            deq[Robot[i]] = false;
            deq[next] = true;
            Robot[i] = next;
            A[next]--;
            if (!A[next])
                Zero++;
            if (next == N - 1) {
                deq[next] = false;
                idx.push_back(i);
            }
        }
    }
    for (int i = 0; i < idx.size(); i++)
        Robot.erase(Robot.begin() + idx[i]);
}
 
void Add_robot() {
    if (A[0<= 0)
        return;
    Robot.push_back(0);
    A[0]--;
    if (A[0== 0)
        Zero++;
    deq[0= true;
}
cs

 

728x90