728x90
반응형
https://www.acmicpc.net/problem/5430
문제
문제 구현 방향
c++의 이중연결리스트로 간단하게 구현 해 보았다.
문제 풀이 시 주의점
문자열을 입력받았을 때 숫자로 분리해내는게 조금은 까다로운 문제였다.
또한 출력할 때 한 문자로 만들어 출력해야 틀리지 않는다는 것을 주의해야 한다.
문제 풀이
Rn카운트를 만들어 짝수와 홀수일 때로 나누면 된다.
또한 사이즈가 0일때 D가 나올 경우, 완전히 비어있는 경우 [] 으로 나와야한다는 것만 주의하면 된다.
반복을 하기 때문에 초기화만 잘 해주면 풀리는 문제이다.
코드 구현
#include<iostream>
#include<list>
#include<string>
using namespace std;
int main() {
ios::sync_with_stdio(0); //C 표준 입출력의 동기화를 끄는 코드로 C++에서 입출력 속도를 높이기 위함.
cin.tie(0);
cout.tie(0);
list<long long int> List;
list<long long int>::iterator iter;
long long int testcase, i, num, j, Rn=0, currentNumber, errorcnt =0;
string func, arrays, separator = ",", answer;
cin >> testcase;
for (i = 0; i < testcase; i++) {
cin >> func;
cin >> num;
cin >> arrays;
currentNumber = 0;
// 문자열 순회하며 숫자만 <list>에 추가
for (char c : arrays) {
if (isdigit(c)) {
// 현재 읽고 있는 숫자를 갱신
currentNumber = currentNumber * 10 + static_cast<long long int>(c - '0');
}
else {
// 숫자가 아닌 경우, 현재까지 읽은 숫자를 리스트에 추가하고 초기화
if (currentNumber != 0) {
List.push_back(currentNumber);
currentNumber = 0;
}
}
}
for (j = 0; j < func.length(); j++) {
if (func.substr(j, 1) == "R") {
Rn++; //Rn카운트 증가
}
if (func.substr(j, 1) == "D") {
if (List.size() == 0) {
cout << "error" << endl;
errorcnt = 1;
break;
}
if (Rn % 2 == 0) { //Rn 카운트가 짝수이면 앞에서 삭제
List.pop_front();
}
else { //Rn 카운트가 홀수이면 앞에서 삭제
List.pop_back();
}
}
}
answer = "";
if (List.size() != 0) { //완전히 비어있지 않다면
if (Rn % 2 == 0) {
answer += "["; //첫 문자 [ 추가
for (iter = List.begin(); iter != List.end(); ++iter) {
if (iter == prev(List.end())) { //끝문자일때만 ]추가
answer += to_string(*iter);
answer += "]";
}
else {
answer += to_string(*iter);
answer += ",";
}
}
}
else {
answer += "["; //첫 문자 [ 추가
for (iter = prev(List.end()); iter != List.begin(); --iter) {
answer += to_string(*iter);
answer += ",";
}
answer += to_string(*iter); //끝문자일때만 ]추가
answer += "]";
}
}
else {
if (errorcnt == 0) { //비어있고 error카운트가 0이면
answer += "[";
answer += "]";
}
}
if(errorcnt ==0) //error카운트가 0이면 출력
cout << answer << endl;
List.clear(); //초기화
Rn = 0;
errorcnt = 0;
}
}
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준] 2606 바이러스 c++ 구현 (0) | 2024.02.05 |
---|---|
[백준] 10866 덱 c++ 구현 (0) | 2024.02.04 |
[백준] 2374 같은 수로 만들기 c++ 구현 (0) | 2024.01.30 |
[백준] 6198 옥상 정원 꾸미기 c++ 구현 (1) | 2024.01.28 |
[백준] 2841 외계인의 기타 연주 c++ 구현 (1) | 2024.01.27 |