카테고리 없음

[nhn코딩테스트1차] 2020

개랭갱깽스타 2020. 10. 24. 15:36

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);
  }
}

 

 

 

 

반응형