ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 5430 AC
    Algorithm/문자열 2021. 11. 22. 16:01
    728x90

    https://www.acmicpc.net/problem/5430

     

    5430번: AC

    각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

    www.acmicpc.net

    - 문자열 파싱 + 자료구조 deque 사용 문제이다.(vector를 사용해도 되긴 하다)

     

    - 1차로 입력이 좀 까다롭고, 2차로 R연산 시 배열을 뒤집지 않고 해결할 방법을 찾아야 한다.(만약 배열을 직접 뒤집을 시 시간초과가 나게 된다.)

     

    - 필자는 배열 형태를 입력받아서,  erase 메서드로 맨 앞, 맨 뒤 대괄호를 없애고 추가로 쉼표를 기준으로 파싱을 한 뒤 정수로 변환하여 덱에 push를 했다.

     

    - reverse 상태 여부를 boolean변수로 체크했고, D 연산을 실행하는 경우에 만약 현재 reverse가 된 상태라면 덱의 뒤에서, 아니라면 덱의 앞에서 수를 하나씩 제거했다. 만약 덱이 빈 상태에서 D연산이 들어왔다면, error 변수에 true를 주고 for문을 탈출한 뒤 error를 출력하였다.

     

    - 출력 또한 reverse여부를 기준으로 해서 앞에서, 혹은 뒤에서부터 하나씩 빼면서 출력을 했다.

     

    - 특정 문자를 기준으로 파싱을 할 때는 sstream 헤더와 getline 메서드를 이용하자!

    #include <iostream>
    #include <vector>
    #include <string>
    #include <sstream>
    #include <deque>
    using namespace std;
    
    int main() {
    	int t;
    	cin >> t;
    	while (t--) {
    		string s, arr, temp_string;
    		deque<int> dq;
    		cin >> s;
    		int v_length;
    		cin >> v_length;
    		cin >> arr;
    		arr.erase(arr.begin());
    		arr.erase(arr.end() - 1);
    		istringstream ss(arr);
    		while (getline(ss, temp_string, ',')) {
    			dq.push_back(stoi(temp_string));
    		}
    		bool error = false;
    		bool reversed = false;
    		for (int i = 0; i < s.length(); i++) {
    			if (s[i] == 'R') {
    				reversed = !reversed;
    			}
    			else {
    				if (dq.size() == 0) {
    					error = true;
    					break;
    				}
    				if (reversed) dq.pop_back();
    				else dq.pop_front();
    			}
    		}
    		if (error) cout << "error" << '\n';
    		else {
    			cout << '[';
    			while (!dq.empty()) {
    				if (reversed) {
    					int c = dq.back();
    					dq.pop_back();
    					cout << c;
    				}
    				else {
    					int c = dq.front();
    					dq.pop_front();
    					cout << c;
    				}
    				if (dq.size() != 0) cout << ',';
    			}
    			cout << ']' << '\n';
    		}
    	}
    	return 0;
    }

    'Algorithm > 문자열' 카테고리의 다른 글

    [프로그래머스] 신규 아이디 추천  (0) 2021.11.29
    [프로그래머스] 문자열 압축  (0) 2021.09.20
    [Codility - Iteration] BinaryGap  (0) 2021.09.16

    댓글

Designed by Tistory.