백준 5430 AC (Java,자바)
이번에 풀어본 문제는
백준 5430번 AC 입니다.
📕 문제 링크
❗️코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static Deque<String> dq;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
while(T-- > 0)
{
String cmd = br.readLine();
int n = Integer.parseInt(br.readLine());
String input = br.readLine();
StringTokenizer st = new StringTokenizer(input,"[,]");
dq = new ArrayDeque<>();
for(int i = 0; i < n; i++) dq.add(st.nextToken());
sb.append(doCmd(cmd)).append("\n");
}
System.out.print(sb);
}
static String doCmd(String cmd)
{
boolean isFirst = true;
for(char c : cmd.toCharArray())
{
// 뒤집기
if(c == 'R') isFirst = !isFirst;
// 버리기
else
{
if(dq.isEmpty()) return "error";
// 방향이 first
if(isFirst) dq.pollFirst();
else dq.pollLast();
}
}
StringBuilder sb = new StringBuilder("[");
if(isFirst) while(!dq.isEmpty()) sb.append(dq.pollFirst()).append(",");
else while(!dq.isEmpty()) sb.append(dq.pollLast()).append(",");
if(sb.length() > 1) sb.deleteCharAt(sb.length()-1);
return sb.toString()+"]";
}
}
📝 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static Deque<String> dq;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
while(T-- > 0)
{
String cmd = br.readLine();
int n = Integer.parseInt(br.readLine());
String input = br.readLine();
StringTokenizer st = new StringTokenizer(input,"[,]");
dq = new ArrayDeque<>();
for(int i = 0; i < n; i++) dq.add(st.nextToken());
sb.append(doCmd(cmd)).append("\n");
}
System.out.print(sb);
}
static String doCmd(String cmd)
{
boolean isFirst = true;
for(char c : cmd.toCharArray())
{
// 뒤집기
if(c == 'R') isFirst = !isFirst;
// 버리기
else
{
if(dq.isEmpty()) return "error";
// 방향이 first
if(isFirst) dq.pollFirst();
else dq.pollLast();
}
}
StringBuilder sb = new StringBuilder("[");
if(isFirst) while(!dq.isEmpty()) sb.append(dq.pollFirst()).append(",");
else while(!dq.isEmpty()) sb.append(dq.pollLast()).append(",");
if(sb.length() > 1) sb.deleteCharAt(sb.length()-1);
return sb.toString()+"]";
}
}
📝 풀이
두 가지 연산 R과 D를 사용해 입력된 문자열을 변환시킨 결과를 출력하는 문제입니다. 배열을 뒤집게되면 시간초과가 염려되어 deque를 사용해 포인터의 위치를 바꾸는 방향으로 구현해 보았습니다. 원하는 출력 값에 맞게 변환하는 과정이 조금 지저분 하긴 하지만, 구현 자체는 간단한 문제라고 생각합니다.
📜 후기
Deque를 처음 써본 것 같네요. 써보진 않았지만 알고있었던 자료구조여서 적합하다고 생각하여 활용해보았습니다.
Author And Source
이 문제에 관하여(백준 5430 AC (Java,자바)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jh5253/백준-5430-AC-Java자바저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)