개인공부용123 프로그래밍 블로그

[백준] 5430 본문

알고리즘문제

[백준] 5430

개인공부용123 2017. 5. 4. 16:31

이 문제는 입력이 약간 까다로운 문제인것같습니다.

입력을 deque에 입력한 후에는 chk라는 flag를 두어서 true이면 앞에서 연산을하고 false이면 뒤에서 연산을 하는 방식으로 해결했고

출력시 chk변수를 확인해서 true이면 앞에서 출력 false이면 뒤에서 출력해서 결과를 냈습니다.

주의해야할 점은 입력이 0일경우 주의해서 풀면 될것같습니다.

(입력이 0일경우 D함수가 포함되있지않다면 출력은 []가 나와야합니다.)

#include <iostream> #include <deque> #include <string>


using namespace std; int main() { std::ios::sync_with_stdio(false); bool chk; // true이면 앞에서 false이면 뒤에서 bool ok; int C, n; cin >> C; while (C--) { string cmd = ""; string input_arr = ""; deque dq; ok = true; chk = true; cin >> cmd; cin >> n; cin >> input_arr; // 배열을 담을 문자열 string num = ""; for (int i = 0; i < input_arr.length(); ++i) { // deque로 만들기 if (input_arr[i] == ',' || input_arr[i] == ']') { if (input_arr[i - 1] == '[') break; dq.push_back(atoi(num.c_str())); num = ""; } else if (input_arr[i] != '[' && input_arr[i] != ']') num += input_arr[i]; } for (int i = 0; i < cmd.length(); ++i) { // 변환 if (cmd[i] == 'R') { chk = !chk; } else { if (dq.size() <= 0) { ok = false; break; } if (chk) dq.pop_front(); else dq.pop_back(); } } // 출력해주는 함수 if (ok) { int size = dq.size(); cout << "["; for (int i = 0; i < size; ++i) { if (chk) { cout << dq.front(); dq.pop_front(); } else { cout << dq.back(); dq.pop_back(); } if (!dq.empty()) cout << ","; } cout << "]" << endl; }else{ cout << "error" << endl; } dq.clear(); } return 0; }


'알고리즘문제' 카테고리의 다른 글

[백준] 6591  (0) 2017.05.19
[백준] 11051 이항계수문제  (0) 2017.05.19
[백준] 11866 & 1158 (조세퍼스문제 0, 1)  (0) 2017.05.04
[백준] 1260  (0) 2017.05.04
[백준] 9012  (0) 2017.05.02