CS/Algorithm 문제

[BaekJoon]백준 5430번 AC - C++, Python

 

[BaekJoon]백준 5430번 AC

 

 

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

 

 

내코드

 

-처음에 문자열 파싱하는 부분이 어려웠다.

-[1,2,3] 이렇게 주어졌을때 1, 2, 3을 deque에 넣어야했다.

-헷갈렸던 부분은 숫자가 두자리 숫자가 주어질 수도 있었다는것.

-','를 만나면 tmp를 deque에 push_back 시켜주고 tmp를 0으로 초기화 시켜주고,

','이 아닌경우 10의 자리수인경우 해당값을 tmp에 넣어주고, 1의 자리수인경우 (tmp에 들어있는 10의 자리수 숫자 * 10 + 1의 자리수 숫자)를 해줬다.

-그외에는 크게 어려운 부분이 없었다.

-R이 나왔을때는 숫자 배열이 뒤집어졌다는 표시로 bool 변수 back = true;를 시켜주고 출력할때 뒤에서 부터 출렸했다.

 

#include <iostream>
#include <string.h>
#include <deque>

using namespace std;

int main(void) 
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int testCase = 0; cin >> testCase;

	while (testCase--) {
		string func, arr; int num = 0;
		bool back = false, error = false;
		deque<int> dq;
		cin >> func >> num >> arr;
		
		//initialize deque
		arr.erase(0, 1); arr.pop_back();
		int len = arr.length(), tmp = 0;
		for (int i = 0; i < len; i++) {
			if (arr[i] == ',') {
				dq.push_back(tmp);
				tmp = 0;
			}
			else {
				tmp = tmp * 10 + arr[i] - 48;
			}
		}
		if (tmp != 0) {
			dq.push_back(tmp);
		}

		//reverse and delete array
		int n = func.length();
		for (int i = 0; i < n; i++) {
			//if function is 'R'
			if (func[i] == 'R') {
				if (back == false) {
					back = true;
				}
				else {
					back = false;
				}
			}
			//if function is 'D'
			else {
				int size = dq.size();
				if (size == 0) {
					cout << "error\n";
					error = true;
					break;
				}
				else {
					if (back == false) dq.pop_front();
					else dq.pop_back();
				}
			}
		}
		//print
		if (error == true) continue;
		cout << "[";
		//if reversed
		while (!dq.empty() && back == true) {
			cout << dq.back();
			dq.pop_back();
			if (!dq.empty()) cout << ",";
		}
		//if not reversed
		while (!dq.empty() && back == false) {
			cout << dq.front();
			dq.pop_front();
			if (!dq.empty()) cout << ",";
		}
		cout << "]\n";
	}
	return 0;
}

 

22/10/02 Python으로 다시품

from collections import deque


T = int(input())
for _ in range(T):
    func = list(input())
    n = int(input())
    tmp = input()
    tmp = tmp.replace("[", "")
    tmp = tmp.replace("]", "")
    tmp = tmp.split(",")
    if tmp[0] == "":
        queue = deque()
    else:
        queue = deque(tmp)

    is_reverse = False
    is_error = False
    for f in func:
        if f == "R":
            is_reverse = not is_reverse
        elif f == "D":
            if len(queue) == 0:
                is_error = True
                break
            if is_reverse:
                queue.pop()
            else:
                queue.popleft()
    if is_error:
        print("error")
    else:
        if is_reverse:
            queue.reverse()
        print("[" + ",".join(queue) + "]")
728x90
반응형