[알고리즘] 인프런 - 후위식 연산

정은아·2024년 1월 11일
post-thumbnail

인프런 - 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- Section 5 - 후위식 연산(postfix)문제

내 풀이

import java.util.Scanner;
import java.util.Stack;

public class Stack_04 {
	public static void main(String[] args) {
		// 후위식 연산을 통해 값을 출력하는 문제
		
		// 1. 테스트케이스 String을 받아온다.(연산이 들어가서)
		// 2. 답을 출력할 answer 변수를 만든다.
		// 3. stack을 만든다.
		// 4. forEach문으로 stack계산을 시작한다.
		// 5. if문을 써서 i번째 stack의 값이 숫자이면 add한다.
		//    이 때, 바로 add하지 않고, 48을 빼준다.(아스키코드)
		// 6. left, right변수를 만들어 stack.pop();을 넣어준다.
		// 7. 다시 if문을 써서 연산을 만나면 left값에서 rigght값을 연산한다.
		// 8. 모든 계산이 끝나면 stack에는 숫자 하나가 남는데, 그걸 get한다.
		
		Scanner sc = new Scanner(System.in);
		
		String str = sc.next();
		int answer = 0;
		
		Stack <Integer> stack = new Stack<>();
		
		for (char c : str.toCharArray()) {
			//Character.isDigit(char c) = 지정된 문자가 숫자인지 확인하는 데 사용, T/F값 반환
			if (Character.isDigit(c)) {
				stack.add(c - '0');
			}else {
				// 처음으로 꺼내지는 숫자를 오른쪽에 둔다.
				int right = stack.pop();
				// 두번째로 꺼내지는 숫자로 연산을 한다.
				int left = stack.pop();
				
				if (c == '+') {
					stack.add(left + right);
				} else if(c == '-') {
					stack.add(left - right);
				} else if(c == '*') {
					stack.add(left * right);
				} else if(c == '/') {
					stack.add(left / right);
				}
			}
		}
		
		answer = stack.get(0);
		System.out.println(answer);
	}
}

느낀점

후위연산으로 받아온 테스트케이스는 연산이 포함되어있어 String으로 받았으나
stack은 Integer로 만들었기 때문에.. 이런 메서드를 사용해야 했다.
또 새로운 메서드를 알게 되어서 기쁘다!

Character.isDigit(char ch) 메서드 알아보기

Java에서 Character.isDigit(char ch) 메소드는 Character 클래스의 일부이며 지정된 문자가 숫자인지 확인하는 데 사용됩니다. 이 메서드는 문자가 숫자인지 여부에 따라 부울 값('true' 또는 'false')을 반환합니다.

이 방법의 작동 방식은 다음과 같습니다.

지정된 문자 'ch'가 숫자(0-9)인 경우 메서드는 'true'를 반환합니다.
지정된 문자가 숫자가 아닌 경우 메서드는 'false'를 반환합니다.

출처 : chat-GPT

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글