- greedy
- DP
- Study
- ๊ต์ฌ
- sort
- ๊น์ด ์ฐ์ ํ์
- ์ ๋ ฌ
- dfs
- ๊ทธ๋ํ ์ด๋ก
- PGM
- ์๋ฃ๊ตฌ์กฐ
- ๋ฐฑํธ๋ํน
- BFS
- stack
- LV2
- ์๋ฎฌ๋ ์ด์
- Brute Force Algorithm
- SpringBoot
- Dynamic Programming
- ์ํ
- ๋๋น ์ฐ์ ํ์
- Python
- queue
- ๊ตฌํ
- ๋ฌธ์์ด
- ์ ์๋ก
- Java
- CodingTest
- ๊ทธ๋ํ ํ์
- BOJ
๊ธฐ๋ก๋ฐฉ
BOJ_1021 : ํ์ ํ๋ ํ ๋ณธ๋ฌธ
๐น ๋ฌธ์ ๐น
์ง๋ฏผ์ด๋ N๊ฐ์ ์์๋ฅผ ํฌํจํ๊ณ ์๋ ์๋ฐฉํฅ ์ํ ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ง๋ฏผ์ด๋ ์ด ํ์์ ๋ช ๊ฐ์ ์์๋ฅผ ๋ฝ์๋ด๋ ค๊ณ ํ๋ค.
์ง๋ฏผ์ด๋ ์ด ํ์์ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ์ฐ์ฐ์ ์ํํ ์ ์๋ค.
1. ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฝ์๋ธ๋ค. ์ด ์ฐ์ฐ์ ์ํํ๋ฉด, ์๋ ํ์ ์์๊ฐ a1, ..., ak์ด์๋ ๊ฒ์ด a2, ..., ak์ ๊ฐ์ด ๋๋ค.
2. ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ด๋์ํจ๋ค. ์ด ์ฐ์ฐ์ ์ํํ๋ฉด, a1, ..., ak๊ฐ a2, ..., ak, a1์ด ๋๋ค.
3. ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋์ํจ๋ค. ์ด ์ฐ์ฐ์ ์ํํ๋ฉด, a1, ..., ak๊ฐ ak, a1, ..., ak-1์ด ๋๋ค.
ํ์ ์ฒ์์ ํฌํจ๋์ด ์๋ ์ N์ด ์ฃผ์ด์ง๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋ฏผ์ด๊ฐ ๋ฝ์๋ด๋ ค๊ณ ํ๋ ์์์ ์์น๊ฐ ์ฃผ์ด์ง๋ค. (์ด ์์น๋ ๊ฐ์ฅ ์ฒ์ ํ์์์ ์์น์ด๋ค.)
์ด๋, ๊ทธ ์์๋ฅผ ์ฃผ์ด์ง ์์๋๋ก ๋ฝ์๋ด๋๋ฐ ๋๋ 2๋ฒ, 3๋ฒ ์ฐ์ฐ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐น ์ ๋ ฅ ๐น
์ฒซ์งธ ์ค์ ํ์ ํฌ๊ธฐ N๊ณผ ๋ฝ์๋ด๋ ค๊ณ ํ๋ ์์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค.
N์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , M์ N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
๋์งธ ์ค์๋ ์ง๋ฏผ์ด๊ฐ ๋ฝ์๋ด๋ ค๊ณ ํ๋ ์์ ์์น๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค.
์์น๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
๐น ์ถ๋ ฅ ๐น
์ฒซ์งธ ์ค์ ๋ฌธ์ ์ ์ ๋ต์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
์๋ฐฉํฅ ์ํ ํ๋ฅผ ํ์ฉํ ๋ฌธ์ ์ด๋ค. ํ์ง๋ง ์ฐ์ฐ์ ํ์ ๋งจ ์ ์์์ ์ ๊ฑฐ๋ง ์ํํ๋ค.
ํ๋ ์ข์ฐ๋ก ์์์ ์ฌํํธ๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค. ๋ฐฐ์ด, vector ๋ชจ๋ ํ์ด ๊ฐ๋ฅํ์ง๋ง vector๋ฅผ ์ฌ์ฉํ์๋ค.
๐ธ ์ฝ๋ ๐ธ
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(void) {
int N, M, answer = 0;
cin >> N >> M;
vector<int> que(N); //ํ๋ก ์ฌ์ฉํ vector
for (int i = 0; i < N; i++) //ํ์ 1~N ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ
que[i] = i + 1;
int size = N, pick, idx, temp; //ํ์ฌ ํ์ ํฌ๊ธฐ, ์ฐพ๋ ๊ฐ, ์ฐพ๋ ๊ฐ์ ์ธ๋ฑ์ค, ์์ ๋ณ์
for (int i = 0; i < M; i++) {
cin >> pick; //์ฐพ๋ ๊ฐ
idx = find(que.begin(), que.end(), pick) - que.begin(); //์ฐพ๋ ๊ฐ์ ์ธ๋ฑ์ค
//์ถ๋ ฅ ํ
์คํธ
/*cout << "\nque : ";
for (int j : que) {
cout << j << " ";
}
cout << "\npic : " << pick << " idx : " << idx << endl;*/
while (true) {
if (que.front() == pick) { //๊ฐ์ ์ฐพ์
que.erase(que.begin());
size--;
break;
}
if (idx <= size / 2) { //ํ๋ฅผ ์ผ์ชฝ์ผ๋ก ๋ฐ๊ธฐ
temp = que.front();
que.erase(que.begin());
que.push_back(temp);
}
else { //ํ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ๊ธฐ
temp = que.back();
que.erase(que.end()-1);
que.insert(que.begin(), temp);
}
answer++;
}
}
cout << answer;
return 0;
}
๐ธ ์ฝ๋ ํด์ ๐ธ
vector<int> que(N); //ํ๋ก ์ฌ์ฉํ vector
intํ vector๋ฅผ ์๋ฐฉํฅ ํ๋ก ์ฌ์ฉํ์๋ค.
for (int i = 0; i < N; i++) //ํ์ 1~N ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ
que[i] = i + 1;
๋ฌธ์ ์์๋ ์ค๋ช ์ด ๋ถ์กฑํ์ง๋ง, ํ๋ ์๋์ผ๋ก 1~N ๊น์ง์ ๊ฐ์ด ์ ๋ ฅ๋๋ค.
(์๋ ์ฐพ๋ ๊ฐ์ ์ฒ์ ํ ์ํ์ ์์์ ์์น์ด๊ธฐ ๋๋ฌธ)
cin >> pick; //์ฐพ๋ ๊ฐ
idx = find(que.begin(), que.end(), pick) - que.begin(); //์ฐพ๋ ๊ฐ์ ์ธ๋ฑ์ค
์ฐพ๋ ๊ฐ์ ์ ๋ ฅ๋ฐ์ผ๋ฉด, ๊ทธ ๊ฐ์ ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ํ์ธํ๋ค.
while (true) {
if (que.front() == pick) { //๊ฐ์ ์ฐพ์
que.erase(que.begin());
size--;
break;
}
if (idx <= size / 2) { //ํ๋ฅผ ์ผ์ชฝ์ผ๋ก ๋ฐ๊ธฐ
temp = que.front();
que.erase(que.begin());
que.push_back(temp);
}
else { //ํ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ๊ธฐ
temp = que.back();
que.erase(que.end()-1);
que.insert(que.begin(), temp);
}
answer++;
}
ํ์ ์ฒ์ ๊ฐ์ด ์ฐพ๋ ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด ์ ๊ฑฐํ๋ค. (ํ์ ๋งจ ์์์๋ง pop์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ)
์๋๋ผ๋ฉด, ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ํ์ธํ๊ณ ๋ ๊ฐ๊น์ด ๋ฐฉํฅ์ผ๋ก ์ฌํํธ ํ๋ค. (๋ฐ๋ณต)
๐ธ code review ๐ธ
- A : fine๋ถ๋ถ์ ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์๊น์?
- find ์ฌ์ฉ ํ์ค ๋, empty์ ๋ํ ์์ธ์ฒ๋ฆฌ๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
- find ํ์ ๋, ํด๋น ์๋ฃ๊ฐ ์์ผ๋ฉด vector์ size๋ฅผ ์ถ๋ ฅํฉ๋๋ค. (์๋ฐํ ๋งํ๋ฉด, vector์ end)
- ํฌ์ธํฐ ์ฐ์ฐ์ ํ๊ธฐ ๋๋ฌธ์(vector์ begin ์ฃผ์๋ฅผ ๋บ) vector์ size๊ฐ ๋์ค๋ ๊ฒ.
if (idx == que.size()) {
continue;
}
- B : ์ผ๋ฐ์ (์ค๋ฌด์ )์ผ๋ก ํ๋นํ ์๊ฒฌ์ด์ง๋ง ์ด์ ๊ฐ์ด ์ ๋ ฅ์ ๋ฒ์์ ์กฐ๊ฑด์ด ๋ช ํํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด์์๋ ์์ ๋ถ๊ฐ๋ฅํ ์์ธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ด ํ์๋ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ find์์๋ ์ฐพ๋ ๊ฐ์ด ํญ์ ์์ ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๋ง ์ฆ๊ฐํ ๋ฟ ๋ฌด์๋ฏธํฉ๋๋ค.
- A : while๋ฌธ์ ์ฒซ if๋ฌธ์ while๋ฌธ ์กฐ๊ฑด์ผ๋ก ๋ฐ๊ฟ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๐ธ feedback code ๐ธ
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(void) {
int N, M, answer = 0;
cin >> N >> M;
vector<int> que(N); //ํ๋ก ์ฌ์ฉํ vector
for (int i = 0; i < N; i++) //ํ์ 1~N ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ
que[i] = i + 1;
int size = N, pick, idx, temp; //ํ์ฌ ํ์ ํฌ๊ธฐ, ์ฐพ๋ ๊ฐ, ์ฐพ๋ ๊ฐ์ ์ธ๋ฑ์ค, ์์ ๋ณ์
for (int i = 0; i < M; i++) {
cin >> pick; //์ฐพ๋ ๊ฐ
idx = find(que.begin(), que.end(), pick) - que.begin(); //์ฐพ๋ ๊ฐ์ ์ธ๋ฑ์ค
while (que.front() != pick) { //์ฐพ๋ ๊ฐ์ด ๋์ฌ๋๊น์ง ๋ฐ๋ณต
if (idx <= size / 2) { //ํ๋ฅผ ์ผ์ชฝ์ผ๋ก ๋ฐ๊ธฐ
temp = que.front();
que.erase(que.begin());
que.push_back(temp);
}
else { //ํ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ๊ธฐ
temp = que.back();
que.erase(que.end()-1);
que.insert(que.begin(), temp);
}
answer++;
}
que.erase(que.begin());
size--;
}
cout << answer;
return 0;
}
๐ธ end ๐ธ
์ค๋ฒํค๋, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฑ์ ์ ๊ฒฝ์ฐ๋ฉด์ ์ฝ๋ฉํ๋ ค๋ ์๋กญ๊ฒ ์ ๊ฒฝ์จ์ผ ํ ๋ถ๋ถ์ด ๋ง์์ง ๊ฒ ๊ฐ๋ค.
์์ง ์ต์ํ์ง ์์์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์๋ฐ, ์ข์ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด์ ๋ ์ฒ ์ ํ ๋ฐ์ ธ๋ณด์์ผ ๊ฒ ๋ค.
'CodingTest > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_2204 : ๋๋น์ ๋๋ ์ฆ ํ ์คํธ (0) | 2022.05.18 |
---|---|
BOJ_22351 : ์ํ์ ์ฒด์ก๊ณผ๋ชฉ ์ ๋๋ค 3 (0) | 2022.05.12 |
PGM : lv2_์ฌ์ ์ ๋ถ๋ถ๋ฌธ์์ด (0) | 2022.04.02 |
PGM : ๋ ๋งต๊ฒ (0) | 2022.04.02 |
PGM : K๋ฒ์งธ์ (0) | 2022.03.27 |