반응형
dackyy
대기의 연대기
dackyy
전체 방문자
오늘
어제
  • 분류 전체보기 (49)
    • java (7)
    • 코딩테스트 (23)
    • python (10)
    • Network (2)
    • Web (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 배열
  • 비교 연산자
  • TLS
  • 논리 연산자
  • SSL
  • 시프트 연산자
  • java
  • 증감 연산자
  • 비트 연산자
  • 제어문
  • 반복문
  • 산술 연산자
  • 기본 자료형
  • 배열생성
  • 참조 자료형
  • switch
  • 자료형
  • 연산
  • 조건문
  • https

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dackyy

대기의 연대기

코딩테스트

[JAVA] 후위연산자를 이용한 + - 연산 ( 제네릭 X)

2022. 7. 14. 16:08
반응형

import org.apache.commons.lang3.StringUtils; 함수를 사용하려면 apache 홈페이지에서 api를 다운받으셔야합니다.

StringUtils.inNumeric( ) -> 매개변수가 숫자인지 아닌지 boolean값으로 리턴을 해줍니다.

다운로드 링크  https://commons.apache.org/proper/commons-lang/download_lang.cgi

다운 받으신 후 사용하시는 IDE에서 외부라이브러리 추가 하시고 사용하시면 됩니다.

package Day2;
import org.apache.commons.lang3.StringUtils;
public class InStackCalc {
    static String str = "113 + 11 - (32 - (9 - 2 + 6)) + (32 - (9 - 2 + 6))";
    static String[] arr = str.split("");
    static int cnt;
    static String[] stack = new String[str.length()];
    static String postfix = "";

    public static void main(String[] args) {
        //후위표기법으로 저장
        cnt = 0;
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
            if (StringUtils.isNumeric(arr[i])) {
                postfix += arr[i];
            } else if (arr[i].equals(" "))
                postfix += arr[i];

            else if (arr[i].equals("(")) {
                push(arr[i]);
            } else if (arr[i].equals(")")) {
                for (int k = 0; k < stack.length; k++) {
                    System.out.print(stack[k]);
                }
                do {
                postfix += " ";
                postfix += pop();
            } while (!stack[cnt].equals("("));
                postfix += pop();
            } else {
                if (cnt == 0)
                    push(arr[i]);
                else if (stack[cnt - 1].equals("+") || stack[cnt - 1].equals("-")) {
                    postfix += pop();
                    push(arr[i]);
                } else {
                    push(arr[i]);
                }
            }
        }
        postfix = postfix.replace("  ", " ");
        postfix = postfix.replace("(", "");
        System.out.println(postfix);

        //계산시작
        stack = new String[str.length()];
        cnt = 0;
        String[] sStack = postfix.split(" ");
        for (int i = 0; i < sStack.length; i++) {
            if (StringUtils.isNumeric(sStack[i]))
                push(sStack[i]);

            else if (sStack[i].equals("+"))
                push(Integer.toString(Integer.parseInt(pop()) + Integer.parseInt(pop())));

            else if (sStack[i].equals("-"))
                push(Integer.toString(-Integer.parseInt(pop()) + Integer.parseInt(pop())));
        }
        System.out.println(str + " = " + stack[0]);

    }
    static String pop(){
        if(cnt == 0){
            return null;
        }
        else{
            int tmp = cnt-1;
            System.out.println("pop : " + stack[tmp]);
            cnt--;
            return stack[tmp];
        }
    }
    static void push(String num){
        System.out.println("push : " + num);
        if (cnt == 0){
            stack[0] = num;
        }
        else {
            stack[cnt] = num;
        }
        cnt++;
    }
}
반응형

'코딩테스트' 카테고리의 다른 글

[JAVA] 원형 Queue를 사용한 너비우선탐색(BFS) Queue제네릭 사용 X (미로탈출)  (0) 2022.07.15
[JAVA] 후위연산자를 이용한 + - 연산 (제네릭 Stack 사용)  (0) 2022.07.14
[JAVA] 팩토리얼 재귀함수  (0) 2022.07.13
[JAVA] 이진탐색 재귀함수 구현  (0) 2022.07.13
[JAVA] 정수 받아 작은값부터 출력하기 (순열)  (0) 2022.07.11
    '코딩테스트' 카테고리의 다른 글
    • [JAVA] 원형 Queue를 사용한 너비우선탐색(BFS) Queue제네릭 사용 X (미로탈출)
    • [JAVA] 후위연산자를 이용한 + - 연산 (제네릭 Stack 사용)
    • [JAVA] 팩토리얼 재귀함수
    • [JAVA] 이진탐색 재귀함수 구현
    dackyy
    dackyy

    티스토리툴바