import java.util.Scanner;
import java.util.Stack;
class Main {
private static final String open = "(";
private static final String close = ")";
/**
* @param numOfOrder 주문표 장수
* @param orderArr 직원이 작성한 주문표가 담긴 배열
*/
private static void solution(int numOfOrder, String[] orderArr) {
// TODO: 이곳에 코드를 작성하세요. 추가로 필요한 함수와 전역변수를 선언해서 사용하셔도 됩니다.
int index = 0;
for (String order : orderArr) {
printSolution(order);
index++;
if (index != numOfOrder) System.out.println();
}
}
private static void printSolution(String order) {
int originIndex = 0;
Stack<String > orderStack = new Stack<>();
String[] orders = order.split("");
int index = -1;
for (String o : orders) {
index++;
if (o.equals(close)) { //
popUtilOpenAndPutWords(orderStack, index);
} else {
orderStack.push(o);
}
}
System.out.print(orderStack);
}
private static void popUtilOpenAndPutWords(Stack<String> orderStack, int index) {
if (orderStack.isEmpty() || orderStack.size() == 0) return;
StringBuilder wordBuilder = new StringBuilder();
boolean findOpen = false;
while (!findOpen) {
String w = orderStack.pop();
if (!w.equals(open)) {
wordBuilder.append(w);
} else {
findOpen = true;
}
}
char preOpen = orderStack.pop().charAt(0);
if(Character.isDigit(preOpen)){ //숫자일 경우
int repeat = Character.getNumericValue(preOpen);
String now = wordBuilder.reverse().toString();
wordBuilder = new StringBuilder();
for(int i=0; i<repeat; i++)
wordBuilder.append(now);
} else { //문자일 경우
wordBuilder.append(preOpen);
}
String result = wordBuilder.toString();
orderStack.push(result);
}
private static class InputData {
int numOfOrder;
String[] orderArr;
}
private static InputData processStdin() {
InputData inputData = new InputData();
try (Scanner scanner = new Scanner(System.in)) {
inputData.numOfOrder = Integer.parseInt(scanner.nextLine().replaceAll("\\s+", ""));
inputData.orderArr = new String[inputData.numOfOrder];
for (int i = 0; i < inputData.numOfOrder; i++) {
inputData.orderArr[i] = scanner.nextLine().replaceAll("\\s+", "");
}
} catch (Exception e) {
throw e;
}
return inputData;
}
public static void main(String[] args) throws Exception {
InputData inputData = processStdin();
solution(inputData.numOfOrder, inputData.orderArr);
}
}
반응형