https://school.programmers.co.kr/learn/courses/30/lessons/81303
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
주의할 점
- list나 단순 vector를 이용한 delete, insert 사용 시 시간초과가 발생합니다.
- 삭제의 경우 내역을 역순으로 기억해야 하므로 stack을 사용하면 편리합니다.
- 양방향 링크드리스트를 이용하면 쉽게 풀 수 있습니다.
코드
더보기
#include <string>
#include <vector>
#include <stack>
#include <cstdio>
#include <iostream>
using namespace std;
struct Node{
int id,left,right;
};
string solution(int n, int k, vector<string> cmd) {
string answer(n,'O');
stack<Node> st;
vector<Node> list;
for(int i=0;i<=n;i++){
list.push_back({i,i-1,i+1});
}
for(int i=0;i<cmd.size();i++){
switch(cmd[i][0]){
case 'U':{
int num=stoi(&cmd[i][2]);
while(num--){
k=list[k].left;
}
break;
}
case 'D':{
int num=stoi(&cmd[i][2]);
while(num--){
k=list[k].right;
}
break;
}
case 'C':{
Node tmp=list[k];
answer[tmp.id]='X';
st.push(tmp);
if(tmp.left != -1){
list[tmp.left].right=tmp.right;
}
if(tmp.right != n){
list[tmp.right].left=tmp.left;
k=tmp.right;
}
else
k=tmp.left;
break;
}
case 'Z':{
Node tmp=st.top();
st.pop();
answer[tmp.id]='O';
if(tmp.left != -1)
list[tmp.left].right=tmp.id;
if(tmp.right != n)
list[tmp.right].left=tmp.id;
break;
}
}
}
return answer;
}

728x90
'알고리즘 > 프로그래머스 문제' 카테고리의 다른 글
| [Level 3] - 스티커 모으기2 (0) | 2023.07.10 |
|---|---|
| [Level 3] - 자물쇠와 열쇠 (0) | 2023.07.10 |
| [ALGORITHM] LEVEL4 2021 카카오 채용연계형 인턴십 - 미로 탈출 (0) | 2023.01.04 |
| [ALGORITHM] LEVEL3 2022 KAKAO BLIND RECRUITMENT - 양과 늑대 (0) | 2022.12.30 |
| [ALGORITHM] LEVEL3 2022 KAKAO BLIND RECRUITMENT - 파괴되지 않은 건물 (0) | 2022.12.28 |
댓글