Beakjoon 5430 AC

Baekjoon Online Judge

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

나의 풀이

배열의 처음 원소의 인덱스 start와 마지막 원소의 인덱스 end를 정해 문제를 해결하였다.
처음 배열의 방향을 정방향이라고 생각했을 때 정방향일 때 D 명령어를 수행하면 start를 우측으로 이동, 역방향일 때 D 명령어를 수행하면 end를 좌측으로 이동하게 하였다. R 명령어는 정방향이면 역방향으로, 역방향이면 정방향으로 바꿔준다.
[1, 2, 3, 4, 5] 라는 배열이 주어지고, 명령어가 DRD일 때를 표현하면 아래 그림과 같다.

init

D

R

D

만약 모든 원소가 삭제되면 start > end가 되고, 이 상황에서 D 명령어가 들어오면 error를 출력한다.

풀이 코드 : 5430 AC

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int T;
    cin>>T;
    for(int t=0;t<T;t++){
        string cmd;
        cin>>cmd;
        int N;
        cin>>N;
        string arr_str;
        vector<int> arr;
        cin>>arr_str;
        int num = 0;
        if(N != 0){
            for(int i=1;i<arr_str.size();i++){
                if(arr_str[i] >= '0' && arr_str[i] <= '9'){
                    num *= 10;
                    num += arr_str[i] - '0';
                }
                else if(arr_str[i] == ',' || arr_str[i] == ']'){
                    arr.push_back(num);
                    num = 0;
                }
            }
        }
        int reverse = -1;
        int start = 0; 
        int end = N-1;
        bool err = false;

        for(int i=0;i<cmd.size();i++){
            if(cmd[i] == 'R')
                reverse *= -1;
            else if(cmd[i] == 'D'){
                if(start > end) err = true;
                if(reverse == -1){
                    start++;
                }
                else{
                    end--;
                }


            }
        }
        if(err){
            cout<<"error\n";
        }
        else{
            cout<<"[";
            if(reverse == -1){
                for(int i=start;i<=end;i++){
                    if(i != end)
                        cout<<arr[i]<<",";
                    else
                        cout<<arr[i];
                }
            }
            else{
                for(int i=end;i>=start;i--){
                    if(i != start)
                        cout<<arr[i]<<",";
                    else
                        cout<<arr[i];
                }
            }
            cout<<"]\n";
        }
    }
}

채점결과

49993


© 2020. All rights reserved.

Powered by Hydejack v8.4.0