๋ฌธ์ ๋งํฌ
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<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> 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 |
'๋ฐฑ์ค > Gold' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 20057 : ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋ (0) | 2022.05.30 |
---|---|
[BOJ] 20056 : ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ (0) | 2022.05.24 |
[BOJ] 19238 : ์คํํธ ํ์ (0) | 2022.05.23 |
[BOJ] 17825 : ์ฃผ์ฌ์ ์ท๋์ด (0) | 2022.05.19 |
[BOJ] 17822 : ์ํ ๋๋ฆฌ๊ธฐ (0) | 2022.05.18 |