๋ฌธ์ :
https://programmers.co.kr/learn/courses/30/lessons/81303
๋ถ์ :
์ฃผ์ด์ง ํ ์ ๋ณด๋ฅผ ๋ฒกํฐ์ ๋ด์ erase, insert๋ฑ ๊ธฐ๋ณธ STL ๋ฐฉ์์ผ๋ก ์ ๊ทผํ์๋ค. ํ ์คํธ ์ผ์ด์ค๋ ๋ง์์ผ๋ ์ ํ์ฑ ํ ์คํธ, ํจ์จ์ฑ ํ ์คํธ์์ segmentation fault ์๋ฌ๋ฅผ ๋ฐ์๊ณ ๋ฒกํฐ ๊ณต๊ฐ์ ์ง์ฐ๊ณ ๋ค์ ์ฝ์ ํ๋ ๊ณผ์ ์์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋์ด์๋ ๊ฒ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฒํ๊ฑฐ ๊ฐ๋ค. ๊ทธ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ set์ด ์์๋ฅผ ๋ฃ์ ๋๋ง๋ค ์๋์ ์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด ๋ค์ด ๊ฐ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์๋ค ..!
๊ทธ๋์ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ด๋ ๊ทธ๋ฆ์ set์ผ๋ก ๋ฐ๊พธ์๊ณ iterator๋ฅผ ์ด์ฉํด U, D, C, Z ์ ์ธ๋ฑ์ค๋ฅผ ์ ์ ํ๊ฒ ์์ง์ฌ ์ฃผ์๋ค.
ํ๋ฆฐ ์ ๊ทผ ์ฝ๋ : (vector ์ด์ฉ)
#include <string>
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
vector<int> reV;
stack<pair<int, int>> s;
string solution(int n, int k, vector<string> cmd) {
string answer = "";
for(int i = 0; i < n; i++){
reV.push_back(i);
}
int moving = k;
vector<int>::iterator nowArray = reV.begin();
for(int i =0; i < cmd.size(); i++){
nowArray = reV.begin() + moving; // ํ์ฌ ์์น ๊ฐ 2
//c cmd ์ํ
if(cmd[i] == "C"){// ์ญ์
s.push({moving, *nowArray});// ์ญ์ ์ธ๋ฑ์ค, ์์ ๊ฐ
reV.erase(nowArray);
//reV.resize(n);
if(*nowArray == 7){ // ๋ง์ง๋ง
moving -=1;
}
continue;
//z cmd ์ํ
}else if(cmd[i] == "Z"){
if(!s.empty()){
int index = s.top().first;
int value = s.top().second;
reV.insert(reV.begin() + index , value);
if(index < moving){
moving += 1;
}
s.pop();
}
continue;
}else{
if(cmd[i][0] == 'D' && (48 <= cmd[i][2] && cmd[i][2] <= 57)){
moving += cmd[i][2] - '0';
}else if(cmd[i][0] == 'U' && (48 <= cmd[i][2] && cmd[i][2] <= 57)){
moving -= cmd[i][2] - '0';
}
}
}
answer = "OOOOOOOO";
while(!s.empty()){
answer.at(s.top().first) = 'X';
s.pop();
}
return answer;
}
c++ ์ฝ๋ : (set ์ด์ฉ)
#include <string>
#include <iostream>
#include <vector>
#include <stack>
#include <set>
using namespace std;
//vector<int> reV;
set<int> ss;
string solution(int n, int k, vector<string> cmd) {
string answer = "";
stack<int> s;
for(int i = 0; i < n; i++){
ss.insert(i);
}
set<int> :: iterator it,temp;
it = ss.begin();
//์ด๊ธฐ ์์น ๊ฐ ์ค์
while(k--){
it++;
}
for(int i =0; i < cmd.size(); i++){
string str = cmd[i];
//c cmd ์ํ
if(str == "C"){// ์ญ์
s.push(*it); // ์์ ๊ฐ
temp = it;
temp++;
if(temp == ss.end()){ // ๋ง์ง๋ง
temp = it;
--temp;
}
ss.erase(it);
it = temp;
//z cmd ์ํ
}else if(str == "Z"){
ss.insert(s.top());
s.pop();
}else{
if(str[0] == 'D'){
string ss = str.substr(2);
int val = stoi(ss);
while(val--){
++it;
}
}else if(str[0] == 'U'){
string ss = str.substr(2);
int val = stoi(ss);
while(val--){
--it;
}
}
}
}
int idx=0;
for(it = ss.begin(); it!=ss.end();it++){
int val = *it;
if(val==idx){
answer+='O';
}
else{
while(idx<val){
answer+='X';
idx++;
}
answer+='O';
}
idx++;
}
while(idx<n){ //"OOOXX" ๊ฐ์ ์์ธ ์ก์์ฃผ๊ธฐ ์ํจ
answer+='X';
idx++;
}
return answer;
}
'Algorithm๐ฐ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ stack (0) | 2022.03.25 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฅ ํฐ ์ STL(sort) (0) | 2022.03.25 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ 2021 ์นด์นด์ค ์ธํด์ญ DFS (0) | 2021.09.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ณด์ ์ผํ 2020 ์นด์นด์ค ์ธํด์ฝ (0) | 2021.08.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] Summer/Winter Coding ์คํฌํธ๋ฆฌ level2 (0) | 2021.05.08 |
๋๊ธ