Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 휴대폰 기기
- 완전탐색
- 비트마스킹
- 구현
- react
- FlatList
- 경우의 수
- web view
- 백준 1992
- multipart upload
- service 테스트
- 이영직
- bfs dfs
- 상속 관계 매핑
- BFS
- ReactNative
- React Natvive
- 오블완
- 원복
- Navigation
- 티스토리챌린지
- 버튼 활성화
- 폴더구조
- springboot
- 창의충전소
- Project Bee
- React Native
- 노마드코더
- 해외 대외활동
- 자료구조
Archives
- Today
- Total
유미의 기록들
[백준 4주차 - 5430] AC (Java) 본문
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
반응형
'코딩테스트 기록 > 알고리즘 문제' 카테고리의 다른 글
[백준 4주차 - 11723] 집합 (Java) (0) | 2024.04.18 |
---|---|
[백준 4주차 - 19942] 다이어트 (Java) (0) | 2024.04.17 |
[백준 4주차 - 14890] 경사로 (Java) (0) | 2024.04.16 |
[백준 3주차 - 1987] 알파벳 (Java) (0) | 2024.04.14 |
[백준 3주차 - 3197] 백조의 호수 (Java) (0) | 2024.04.13 |
Comments