- ์ด๋ถํ์
- ํ๋ฆฌ์จ๋ณด๋ฉ
- go
- ๋ฐฑ์ค
- js
- ์์ฝ๋
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- DP
- ์ฌ๊ท
- ์ํฐ๋
- DFS
- ํ๋ก๊ทธ๋๋จธ์ค
- Union-Find
- C++
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- ๋นํธ๋งต
- ์น๋ฆฐ์ด
- ์นด์นด์ค2021
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- Python
- ์นด์นด์ค ์ฝํ
- ๋ค์ต์คํธ๋ผ
- LCs
- ํธ๋ฆฌ
- ๋นํธ๋ง์คํน
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- BFS
- golang
- nestjs
- Today
- Total
Hello Ocean! ๐ผ
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ํ ํธ์ง ๋ณธ๋ฌธ
๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/81303#
ํ์ด
boolํํ์ idxs๋ฐฐ์ด์ ๋ง๋ค์ด์, ํด๋น ํ์ด ์ญ์ ๋๋ฉด 0, ์กด์ฌํ๋ฉด 1๋ก ํ๋จํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํด๋ณด์๋ค.
#include <string>
#include <vector>
#include <stack>
#include <iostream>
using namespace std;
string solution(int n, int k, vector<string> cmd) {
stack<int> removed;
vector<bool> idxs(n,1); // 1:์กด์ฌ, 0:์ญ์ ๋จ
int lastIdx = n-1;
string answer = "";
int tempIdx = k;
for (auto c: cmd) {
if (c[0] == 'U') {
int num = stoi(c.substr(2,8));
//cout << "num :" << num;
int count = 0;
while (count < num) {
if (idxs[--tempIdx]) count++;
}
}
if (c[0] == 'D') {
int num = stoi(c.substr(2,8));
int count = 0;
while (count < num) {
if (idxs[++tempIdx]) count++;
}
}
if (c[0] == 'C') {
idxs[tempIdx] = 0;
removed.push(tempIdx);
if (tempIdx == lastIdx) {
lastIdx--; tempIdx--;
continue;
}
while (true) {
if (idxs[++tempIdx]) break;
}
}
if (c[0] == 'Z') {
int idx = removed.top();
removed.pop();
idxs[idx] = 1;
if (idx > lastIdx) lastIdx=idx;
}
}
for (int i=0;i<n;i++){
if (idxs[i]) answer+='O';
else answer+='X';
}
return answer;
}
ํ .. ์ ํ๋์์ 3๊ฐ๊ฐ ํ๋ ธ๊ณ , ํจ์จ์ฑ์ ์ ๋ฐ๋ฐ์ ๋ง์ง๋ชปํ๋ค ใ ใ
์ด ์ฝ๋์์ ์ ํ๋๋ฅผ ๊ฐ์ ํด๋ดค์, ํจ์จ์ฑ์์ ํต๊ณผํ์ง ๋ชปํ ๊ฒ ๊ฐ์ ๋ค๋ฅธ ํ์ด ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋ค.
์ด ๋ธ๋ก๊ทธ์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ์์ด๋์ด์ธ๋ฐ, C++์์ <set> ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
์ฐ๊ฒฐ๋ฆฌ์คํธ ๋์ ์ set์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด๋ ๋๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. (์ ๋ธ๋ก๊ทธ ๋ด์ฉ ๋ฐ์ท)
1. ์ด์งํธ๋ฆฌ ๊ตฌ์กฐ์ด๋ค. → ์ฝ์ /์ญ์ ์๊ฐ ๋ณต์ก๋ : O(logN)
2. iterator๋ฅผ ํตํ ์์ฐจ์ ๊ทผ ๊ฐ๋ฅ→ next(), prev()๋ฅผ ํตํด ํ์ฌ ์์์ ์ ์ ํ์ ๊ฐ๋ฅ
3. set ๋ด๋ถ์ ์์๋ค์ ํญ์ ์ ๋ ฌ๋ ์ํ์ด๋ค.
์ ๋ด์ฉ์ ์ดํดํ๋ค๋ฉด set ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ธ๋ง ํ๋ฉด ์๋์ผ๋ก ๋ณธ ๋ฌธ์ ์์ ์๊ตฌํ๋ ํ ์์คํ ์ด ๊ตฌ์ถ๋จ์ ์ ์ ์๋ค! ๊ธฐ๋ฅ์ ๋ฐ๋ฅธ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค.
์ปค์ ์ด๋: next(set<int>::iterator), prev(set<int>::iterator)
ํ ์ญ์ : set<int>::erase(set<int>::iterator)
ํ ๋ณต์: set<int>::insert(int)
์ฌ์ง์ด erase()์ ๊ฐ์ ๊ฒฝ์ฐ, ์์ ์ญ์ ํ ํด๋น ์์์ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ iterator๋ฅผ ๋ฐํํ๋ฏ๋ก ๋ณ ๋ค๋ฅธ ๊ตฌํ์์ด ๋ฌธ์ ์ ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํด์ ์ ์ ์๋ค. ์ญ์ ํ ์์๊ฐ ๋ง์ง๋ง ์์์ฌ์ iterator๊ฐ set<int>::end() ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ ๊ฒฝ์ฐ์๋ง prev() ๋ฅผ ํตํด ์ด์ ์์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
์ค๋ช ์ด ์ ์ ํ์์ด์, ์ดํดํ๊ธฐ๊ฐ ์ฌ์ ๋ค.
set์ ์ด์ฉํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
#include <string>
#include <vector>
#include <stack>
#include <set>
using namespace std;
string solution(int n, int k, vector<string> cmd) {
string answer(n,'X');
stack<int> removed;
set<int> table;
for (int i=0;i<n;i++)
table.insert(i);
auto cur = table.find(k); // ํ์ฌ ์์น
for(string c: cmd) {
if (c[0] == 'U' || c[0] == 'D') {
int num = stoi(c.substr(2));
if (c[0] == 'U')
while(num--)
cur = prev(cur);
else
while(num--)
cur = next(cur);
continue;
}
if (c[0] == 'C') { // ์ญ์
removed.push(*cur);
cur = table.erase(cur);
if (cur == table.end()) cur = prev(cur);
continue;
}
if (c[0] == 'Z') { // ๋ณต๊ตฌ
table.insert(removed.top());
removed.pop();
continue;
}
}
for(int i:table) answer[i]='O';
return answer;
}
๊ฒฐ๊ณผ
set์ ์ด์ฉํ ์ฝ๋๋ก 100์ ์ ๋ฐ์ ์ ์์๋ค. ๋ค๋ง, ์ค์ ์์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ฐ์์ ๋ set์ ๋ ์ฌ๋ฆด ์ ์์์ ๊ฒ ๊ฐ๋ค.
C++์ STL์ ๋ํ ์ดํด๋๋ฅผ ๋์ฌ์ผ๊ฒ ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๋ณด์ ์ผํ (2020 ์นด์นด์ค ์ธํด์ญ) (0) | 2021.12.30 |
---|---|
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๋ถ๋ ์ฌ์ฉ์ (0) | 2021.12.29 |
[ํ๋ก๊ทธ๋๋จธ์ค/C++] [1์ฐจ] ์ ํ๋ฒ์ค (0) | 2021.12.08 |
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ์ถ์ ํธ๋ํฝ (0) | 2021.11.17 |
[๋ฐฑ์ค/C++] 14906. ์ค๋ฌํผ (0) | 2021.11.03 |