유미의 기록들

[백준 4주차 - 5430] AC (Java) 본문

코딩테스트 기록/알고리즘 문제

[백준 4주차 - 5430] AC (Java)

지유미 2024. 4. 19. 21:21
728x90
반응형

📌 문제

 

 

📝 풀이과정

1) [1,2,3,4]와 같이 입력된 문자열을 int형 숫자로 바꾸기

- 문자열 "[1,2,3,4]" 의 0부터 끝까지 반복

     1-1) '['와 ']'일때 continue

     1-2) '숫자' 일때 아래 식처럼 계산하여 숫자로 변환하기

x=x*10+(aChar-'0');

 

     1-3) ','  일때 Deque에 x를 저장하고 x를 초기화

 

 

2) RDD 와 같은 명령 실행

⚠️ R(뒤집기)를 수행할 때 매번 뒤집기를 수행하면 시간초과가 발생한다 (배열에 들어있는 개수가 10만이기 때문)

 

💡RR일때는 뒤집지 않아도 된다

💡Deque를 사용

 

뒤집혔는지 상태를 확인해서 뒤집혔으면 뒤에 부분 제거, 뒤집히지 않았으면 앞에부분 제거를 한다

ex) [1,2,3]일 때

- RRD이면 앞에 부분 제거 → [2,3]

- RD이면 뒤에 부분 제거 →  [1,2]

 

 

💻 코드

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args)throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int t;
		t=Integer.parseInt(br.readLine());
		
		for(int i=0;i<t;i++){ 
			Deque<Integer> deque=new ArrayDeque<>();
			String p=br.readLine();
			int n=Integer.parseInt(br.readLine());
			String array=br.readLine();
			
			int x=0;
			for(int j=0;j<array.length();j++){
				char aChar=array.charAt(j);
				if(aChar=='[' || aChar==']') continue;
				if(aChar==','){
					deque.add(x);
					x=0;
				}
				else{
					x=x*10+(aChar-'0'); //숫자일때 이전값*10+현재값
				}
			}
			if(x>0) deque.add(x);
			
			boolean reversed=false,error=false;
			for(char pChar: p.toCharArray()){
				if(pChar=='R'){ //R일때
					reversed=!reversed; //뒤집힌 상태인지 확인
				}
				else{ //D일때
					if(deque.isEmpty()){
						error=true;
						break;
					}
					if(reversed){
						deque.pollLast(); //뒤집혔을 때 마지막 제거
					}
					else deque.pollFirst(); //안뒤집혔을 때 첫번째 제거
				}
			}
			
			//출력
			if(error)System.out.println("error");
			else{
				StringBuilder sb=new StringBuilder();
				
				if(reversed){
					while(!deque.isEmpty()){
						sb.append(deque.pollLast()).append(",");
					}
				}else{
					while(!deque.isEmpty()){
						sb.append(deque.pollFirst()).append(",");
					}
				}

				if(sb.length()>0){ 
					sb.setLength(sb.length()-1); //마지막 ,제거
				}
				System.out.println("["+sb.toString()+"]");
			}
		} 
    }
}
728x90
반응형
Comments