프로그래머스 - 표 편집 (Cpp)

https://programmers.co.kr/learn/courses/30/lessons/81303

문제 해설

자료구조 Set에 대한 확실한 이해가 있어야 해결할 수 있는 문제,
Set의 다양한 함수를 사용할 수 있는 좋은 문제다.

전체 소스 코드

#include <bits/stdc++.h>
using namespace std;

bool check[1000010];
set<int> arr;
stack<int> deletedData;

int executeCmd(int point, string cmd) {
char commond = cmd[0];
auto iter = arr.find(point);

string str;
int value;
if (commond == 'U' || commond == 'D') {
for (int i = 2; i < cmd.size(); i++) {
str += cmd[i];
}
value = stoi(str);
}

if (commond == 'U') {
for (int i = 0; i < value; i++) {
iter--;
}
}
if (commond == 'D') {
for (int i = 0; i < value; i++) {
iter++;
}
}
if (commond == 'C') {
deletedData.push(*iter);
iter = arr.erase(iter);

if (iter == arr.end()) {
iter--;
}
}
if (commond == 'Z') {
if (!deletedData.empty()) {
int value = deletedData.top();
deletedData.pop();

arr.insert(value);
}
}

return *iter;
}

void insertNumber(int n) {
for (int i = 0; i < n; i++) {
arr.insert(i);
}
}

void scanSet() {
for (auto iter = arr.begin(); iter != arr.end(); iter++) {
int index = *iter;

check[index] = true;
}
}

string solution(int n, int k, vector<string> cmd) {
string answer = "";
insertNumber(n);

int point = k;
for (int i = 0; i < cmd.size(); i++) {
point = executeCmd(point, cmd[i]);
}
scanSet();

for (int i = 0; i < n; i++) {
if (check[i]) {
answer += 'O';
} else {
answer += 'X';
}
}

return answer;
}
Share