[알고리즘]백준5430 AC -java

kimjingwon·2022년 8월 25일

1.문제

2.생각

R일경우 배열을 뒤집고

D일경우 첫번째 원소 삭제인데

테스트케이스개수 최대 100,
수행할 함수 p는 100,000
배열의 사이즈는 100,000이다

시간제한이 1초이기 때문에 o(n)이 1억을 넘기면 안된다.

그러면 테스트개수 * 배열사이즈만 해도 1억이 넘는다.

시간을 줄여야한다.

R일경우 실제 배열을 뒤집는 것은 굉장히 오래걸린다.

그래서 R일경우 배열은 가만히 냅두고 지워야되는 인덱스값만 변경하도록했다.

코드

import java.io.*;

public class baekjoon5430 {

    public static void main(String[]args) throws IOException {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));

        int count = Integer.parseInt(bufferedReader.readLine());

        Boolean errors=false;
        for(int i=0;i<count;i++){
            String a= bufferedReader.readLine();
            int size = Integer.parseInt(bufferedReader.readLine());
            int ab[]=new int[size];
            String sab[]=new String[size];
            String ss = bufferedReader.readLine();

            if(ss.equals("[]") && a.contains("D")){
                bufferedWriter.write("error"+"\n");
                continue;
            }
            else if(ss.equals("[]")){
                bufferedWriter.write("[]"+"\n");
                continue;
            }
            String ass=ss.substring(1,ss.length()-1);

            String[] asbb=ass.split("\\D+");

            for(int j=0;j< asbb.length;j++){
                if(asbb[j]!=""){
                    ab[j]=Integer.parseInt(asbb[j]);
                }
            }


            String[]abc=a.split("");
            int deleteindex=0;
            int Adeleteindex=ab.length-1;
            int absize=ab.length-1;
            int Dcount=0,Rcount=0;
            Boolean y=true;
            for(int j=0;j<abc.length;j++){
                if(abc[j].equals("R")){
                    //배열뒤집기

                    if(y){
                        y=false;
                    }
                    else{
                        y=true;
                    }
                    Rcount++;
                }
                else if(abc[j].equals("D")){
                    Dcount++;
                    if(Dcount>ab.length){
                        errors=true;
                        break;
                    }
                    if(y){
                        ab[deleteindex]=0;
                        deleteindex++;
                    }
                    else{
                        ab[Adeleteindex]=0;
                        Adeleteindex--;
                    }
                }
            }
            if(errors){
                bufferedWriter.write("error"+"\n");
                errors=false;
                continue;
            }
            if(Rcount%2==0){
                int acount=0;
                for(int j=0;j<ab.length;j++){
                    if(ab[j]!=0){
                        if(acount==0){
                            bufferedWriter.write("["+ab[j]);
                        }

                        else{
                            bufferedWriter.write(","+ab[j]);
                        }
                        acount++;
                    }
                }
                if(acount==0){
                    bufferedWriter.write("[");
                    //System.out.print("[");
                }
                bufferedWriter.write("]"+"\n");

            }
            else {
                int acount=0;
                for(int j=ab.length-1;j>=0;j--){
                    if(ab[j]!=0){
                        if(acount==0){
                            bufferedWriter.write("["+ab[j]);
                        }

                        else{
                            bufferedWriter.write(","+ab[j]);
                        }
                        acount++;
                    }
                }

                if(acount==0){
                    bufferedWriter.write("[");
                }
                bufferedWriter.write("]"+"\n");
            }
        }
        bufferedWriter.flush();
        bufferedWriter.close();
    }
}

0개의 댓글