# 문제
# 입력 및 출력
# 풀이
시간 제한은 1촌데 문자열로 입력받아서 뒤집는 연산을 하기엔 배열 길이 100,000까지여서 시간 초과가 걸릴 것 같았다
그래서 큐를 쓰려고 했는데 이것도 뒤집기 연산을 하려면 push pop이 너무 많아질 것 같았다그래서 앞뒤로 삽입 삭제 연산이되는 deque 자료구조를 쓰기로 했다
// 틀린 풀이
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main() {
int T, N, num;
char c;
cin >> T;
while (T--) {
string cmd;
deque<int> q;
bool reverse = false, error = false;
cin >> cmd >> N >> c;
for (int i = 0; i < N; i++) {
cin >> num >> c;
q.push_back(num);
}
for (int i = 0; i < cmd.size(); i++) {
if (cmd[i] == 'R') reverse = !reverse;
else if (cmd[i] == 'D') {
if (!q.empty()) {
if (reverse) q.pop_back();
else q.pop_front();
}
else error = true;
}
}
if (error) cout << "error\n";
else {
cout << "[";
while (!q.empty()) {
if (reverse) {
num = q.back();
cout << num;
q.pop_back();
}
else {
num = q.front();
cout << num;
q.pop_front();
}
if (!q.empty()) cout << ",";
}
cout << "]\n";
}
}
}
4번의 수정을 통해 위 코드를 작성했다ㅋㅋㅋ
근데 자꾸 틀렸다고 나오더라,,
문제가 뭔가 했는데 cmd, N, c 입력받는 부분에서 문제가 생긴 것 같았다
이게 큰 문제가 되는진 모르겠는데
N에 0이 들어오면 [는 입력이 들어가는데 ]는 변수에 입력이 안된채로 남아있게 된다
그래서 배열을 문자열로 입력받아서 숫자만 덱에 push하는 형식으로 코드를 바꿨다
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main() {
int T, N, k;
cin >> T;
while (T--) {
string cmd, str, num = "";
deque<int> q;
bool reverse = false, error = false;
cin >> cmd >> N >> str;
for (int i = 0; i < str.size(); i++) {
if (isdigit(str[i])) {
num += str[i];
}
else {
if (!num.empty()) {
q.push_back(stoi(num));
num = "";
}
}
}
for (int i = 0; i < cmd.size(); i++) {
if (cmd[i] == 'R') reverse = !reverse;
else {
if (!q.empty()) {
if (reverse) q.pop_back();
else q.pop_front();
}
else error = true;
}
}
if (error) cout << "error\n";
else {
cout << "[";
while (!q.empty()) {
if (reverse) {
k = q.back();
q.pop_back();
}
else {
k = q.front();
q.pop_front();
}
cout << k;
if (!q.empty()) cout << ",";
}
cout << "]\n";
}
}
}
이렇게 바꾸니까 잘 돌아가더라,,
수정 부분은 아래 블로그 참고
https://ongveloper.tistory.com/115
백준 5430 AC c++ (문자열,deque)
문제 출처 : https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.a
ongveloper.tistory.com
입력 버퍼에 괄호가 남아있게 돼서 그런가,,
이유는 잘 모르겠다
그래도 컴퓨터가 계산하는 것이기 때문에 이런 사소한 문제도 처리를 해줘야 할 것이다
알고리즘 자체는 쉬웠는데 정답률이 낮은 이유가 있었네ㅋㅋㅋ
'Algorithm > 📖Baekjoon' 카테고리의 다른 글
#16953 A → B (0) | 2022.06.06 |
---|---|
#1010 다리 놓기 (0) | 2022.06.05 |
#10799 쇠막대기 (0) | 2022.06.03 |
#2606 바이러스 (0) | 2022.06.03 |
#1339 단어 수학 (0) | 2022.06.02 |
댓글