[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ํ ํธ์ง
๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/81303
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ๋ฅผ ํธ์งํ๊ธฐ ์ํด ํ์ํ 4๊ฐ์ง ๋ช ๋ น์ ๊ตฌํํ๋ ๋ฌธ์ .
ํ์ด
- ์ฒ์ ์๊ฐํ๋ ์์ด๋์ด
์ฃผ์ด์ง๋ ๋ช ๋ น์ด๋ก๋ ์ปค์์ ์,์๋ ์ด๋ , ํด๋น ์นธ ์ญ์ , ๊ฐ์ฅ ์ต๊ทผ์ ์ญ์ ๋ ํ ๋ถ๋ฌ์ค๊ธฐ ์ด๋ ๊ฒ 4๊ฐ์ง๊ฐ ์๋ค.
์ญ์ ๋ ํ์ ๋ค์ ์ฝ์ ํ๊ธฐ ์ํด์ ์ค๊ฐ์ ์ฝ์ ํ๊ธฐ๊ฐ ํธ๋ฆฌํ ๋ฑ์ ์ด์ฉํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
์ปค์์ ์์น๋ฅผ int๋ก ๋๊ณ , ์ฃผ์ด์ง ์ซ์๋งํผ ํ๋ฌ์ค ๋ง์ด๋์ค ์ฐ์ฐ์ ์ด์ฉํด ์ปค์์ ์ด๋์ ๊ตฌํํ๋ค.
ํด๋น์นธ์ ์ญ์ ํ ๋๋ฉด deq[k] ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ (k๋ ์ปค์ ์์น) ์ญ์ ํ๊ณ ์คํ์ ์ญ์ ํ ์ธ๋ฑ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
์ญ์ ๋ ํ์ ๋ค์ ๋ถ๋ฌ์ฌ๋๋ ์คํ์ ๋งจ์์ ์๋ ํ์ ๋ํ ์ ๋ณด๋ฅผ ๊บผ๋ด์ ๋ฑ์ ๋ค์ ์ฝ์ ํ๋ ๋ฐฉ์์ผ๋ก ํ๋ค.
์ ๋ฐฉ๋ฒ์ผ๋ก ์ ํ๋ํ ์คํธ๋ ๋ชจ๋ ํต๊ณผํ์ง๋ง, ํจ์จ์ฑ ํ ์คํธ์์ ๋ชจ๋ ์๊ฐ์ด๊ณผ๋ฅผ ๋ฐ์๋ค.
๊ทธ๋์ ์ถ๊ฐ๋ก ์๊ฐํด๋ธ ๋ฐฉ๋ฒ์ด
๋ช ๋ น์ด๋ฅผ ํผ์ณ๋๊ณ ๋ดค์ ๋, Z๋ ์์๋ ํญ์ 1๊ฐ ์ด์์ C๊ฐ ์กด์ฌํ๋ค. C๋ฅผ ํ๊ณ Z๋ฅผ ํ๋ฉด ์ฌ์ค ๋ ๋ช ๋ น์ด๊ฐ ์๋ฏธ๊ฐ ์์ด์ง๋ค. ๋ช ๋ น์ด๋ก Z๊ฐ ๋ค์ด์ค๋ฉด ์์ ๋ช ๋ น์ด์ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ช ๋ น์ด C์ ์์์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
์ด๊ฒ ๋ต์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๊ตฌํํ๊ธฐ๊ฐ ์ฝ์ง ์์๊ณ ๊ณ์ ์ค๋ฅ๊ฐ๋ฌ๋ค.
- ์ฐธ๊ณ ํ ์์ด๋์ด
๊ณ์ ์ํ๋ ค์ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋ป๊ฒ ํ์ด๋ฅผ ํ๋ค ์ฐธ๊ณ ํ๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ค๊ณ ํด์ ๋๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ค.
๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ฉด ์ข์์
1. ํ ์ญ์ ๊ฐ ๊ฐํธํ๋ค.
2. ์ญ์ ๋ ํ์ ๋ณต๊ตฌํ๊ธฐ์ ์ต์ ํ ๋์ด์๋ค.
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ์ด์ ํ๊ณผ, ๋ค์ ํ์ ๋ํ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ๋๋ฌธ์ ๋ค์ ๋ถ๋ฌ์์ ๋
์ด์ ํ๊ณผ ๋ค์ ํ์ด ๋๊ตฌ์๋์ง๋ฅผ ๋ฐ๋ก ํ์ ํ ์ ์๋ค.
์ด์ ํ์ next์ ๋ค์ ํ์ prev๋ฅผ ๋ณต๊ตฌ์ํฌ ํ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ณต๊ตฌ๊ฐ ๋๋ค.
|
#include <bits/stdc++.h>
using namespace std;
struct Node{
int val;
Node* prev;
Node* next;
Node() {val = 0; prev = NULL; next = NULL;}
Node(int t) { val = t; prev = NULL; next = NULL;}
};
string solution(int n, int k, vector<string> cmd) {
string answer = "";
Node* cursor = new Node(0);
for(int i = 1; i<n; i++){
cursor->next = new Node(i);
cursor->next->prev = cursor;
cursor = cursor->next;
}
for(int i = 0; i<n-k-1; i++)
cursor = cursor->prev;
stack<Node*> deleted;
for(auto str : cmd){
char command = str[0];
if(command == 'U'){
int cnt = stoi(str.substr(2));
for(int i = 0; i<cnt; i++)
cursor = cursor->prev;
}
else if(command == 'D'){
int cnt = stoi(str.substr(2));
for(int i = 0; i<cnt; i++)
cursor = cursor->next;
}
else if(command == 'C'){
deleted.push(cursor);
if(cursor->next != NULL) cursor->next->prev = cursor->prev;
if(cursor->prev != NULL) cursor->prev->next = cursor->next;
if(cursor->next == NULL) cursor = cursor->prev;
else cursor = cursor->next;
}
else if(command == 'Z'){
Node* re = deleted.top();
deleted.pop();
if(re->next != NULL) re->next->prev = re;
if(re->prev != NULL) re->prev->next = re;
}
}
while(cursor->prev != NULL)
cursor = cursor->prev;
for(int i = 0; i<n; i++){
if(cursor->val == i){
answer += "O";
if(cursor->next != NULL)
cursor = cursor->next;
}
else
answer += "X";
}
return answer;
}
|
cs |
๋ด ๋ฐฉ์๋๋ก ๋๊น์ง ํ์ด๋ณด๋ ค๊ณ ํ์ง๋ง ๊ฒฐ๊ตญ ๋ค์์ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ฒ๋๋ค.