Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 18249
- 걷는건귀찮아
- MySQL
- 단어 수학
- 원형
- AI Hub
- 우분투
- 2020 KAKAO BLIND RECRUITMENT
- 마우스 따라다니기
- 강의실2
- c#
- 탄막 스킬 범위
- 회의실 배정
- 토글 그룹
- 그리디알고리즘
- 윈도우
- 영상 프레임 추출
- 백준
- SWEA
- 수 만들기
- 알고리즘
- 3273
- 자료구조 목차
- 3344
- 문자열 압축
- 탄막
- 알고리즘 목차
- mysqld.sock
- 유니티
- 탄막 이동
Archives
- Today
- Total
와이유스토리
[연결리스트] (CHECK) 프로그래머스 표 편집 C++ 본문
https://school.programmers.co.kr/learn/courses/30/lessons/81303
배열
정확성 30개 통과, 효율성 5개 통과
#include <string>
#include <vector>
#include <stack>
using namespace std;
string solution(int n, int k, vector<string> cmd) {
string answer = "";
stack<int> st;
for(int i=0; i<n; i++) answer += "O";
for(auto c : cmd) {
switch(c[0]) {
case 'U':
for(int i=0; i<stoi(c.substr(2)); i++) { // 문자 1개 이상
k--;
while (answer[k] == 'X') k--; // 연속 확인
}
break;
case 'D':
for(int i=0; i<stoi(c.substr(2)); i++) {
k++;
while (answer[k] == 'X') k++;
}
break;
case 'C':
answer.replace(k, 1, "X");
st.push(k);
while (answer[k] == 'X') {
if (k == (n-1)) { // k 위, 아래 모두 X
while (answer[k] == 'X') k--;
break;
}
k++;
}
break;
case 'Z':
answer.replace(st.top(), 1, "O");
st.pop();
break;
}
}
return answer;
}
연결리스트
#include <string>
#include <vector>
#include <stack>
using namespace std;
struct Node {
int idx;
Node* prev;
Node* next;
Node() : idx(-1), prev(NULL), next(NULL) {}
Node(int idx, Node* prev, Node* next) : idx(idx), prev(prev), next(next) {}
};
Node head, tail;
string solution(int n, int k, vector<string> cmd) {
string answer(n, 'X');
stack<Node*> st;
// 초기화
head.next = &tail;
tail.prev = &head;
Node* cursor = &head;
for(int i=0; i<n; i++) {
Node* temp = new Node(i, cursor, cursor->next);
cursor->next->prev = temp;
cursor->next = temp;
cursor = cursor->next;
}
// 현재 선택된 행
cursor = &head;
for(int i=0; i<k; i++) cursor = cursor->next;
for(auto c : cmd) {
if (c[0] == 'U') {
for(int i=0; i<stoi(c.substr(2)); i++) cursor = cursor->prev;
}
else if (c[0] == 'D') {
for(int i=0; i<stoi(c.substr(2)); i++) cursor = cursor->next;
}
else if (c[0] == 'C') {
st.push(cursor->next);
cursor->next->next->prev = cursor;
cursor->next = cursor->next->next;
if (cursor->next->idx == -1) cursor = cursor->prev; // 마지막 행
}
else {
Node* temp = st.top();
temp->next->prev = temp;
temp->prev->next = temp;
if (cursor->next->idx == temp->idx) cursor = cursor->next; // 현재 선택된 행 바뀌지 않게
st.pop();
}
}
// answer
Node* ptr = &head;
while (ptr->next->idx != -1) {
answer.replace(ptr->next->idx, 1, "O");
ptr = ptr->next;
}
return answer;
}
'코딩테스트 > 구현|기타' 카테고리의 다른 글
[구현] 백준 23294 웹 브라우저1, 23300 웹 브라우저2 C++ (0) | 2023.09.15 |
---|---|
[구현(최대공약수(GCD))] (CHECK) 백준 15998 카카오머니 C++ (0) | 2023.09.15 |
[소수] (CHECK) 프로그래머스 k진수에서 소수 개수 구하기 C++ (0) | 2023.01.21 |
[큐] 프로그래머스 [1차] 캐시 C++ (0) | 2023.01.20 |
[큐] 프로그래머스 두 큐 합 같게 만들기 C++ (0) | 2023.01.20 |
Comments