코딩 테스트(JAVA)/인프런 문제풀이

후위식 연산(postfix)

Lea Hwang 2022. 3. 16. 23:03

설명

후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.

만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 12입니다.

 

입력

첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.

식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.

 

출력

연산한 결과를 출력합니다.

 

예시 입력 1

352+*9-

예시 출력 1

12

 

💡 코딩 인터뷰에서 주로 물어보는 게 후위식 연산.

  • 사람이 하는 연산방법은 중위식 연산

 

수도 코드, 정답 코드

import java.util.*;

public class Postfix {
	public int solution(String str) {
		// 리턴을 숫자로 받음, 0으로 초기화 -> **"0"이 아닌 0**
		int answer = 0;
		// stack 생성
		Stack<Integer> stack = new Stack<>();
		// lt, rt 선언
		int lt = 0;
		int rt = 0;
		// char형이 아닌 숫자가 들어감
		for(char c : str.toCharArray()) {
			// 숫자면, push
			if(Character.isDigit(c)) stack.push(c-48);
			else {
				// 연산자 만나면 2개 rt,lt 순서로 pop
				// 해당 숫자 2개 stack에서 제거
				rt = stack.pop();
				lt = stack.pop();
				// lt 연산 rt한 것 stack에 push!
                // elseif가 아니라 **else if**
				if(c == '+') stack.push(lt+rt);
				else if(c == '-') stack.push(lt-rt);
				else if(c == '*') stack.push(lt*rt);
				else if(c == '/') stack.push(lt/rt);
			}
		}
		
		// 다 끝났으면 stack.get(0)을 return
		answer = stack.get(0);
		return answer;
	}

	public static void main(String[] args) {
		Postfix T = new Postfix();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		System.out.println(T.solution(str));
	}

}

 

💡 입력받은 str을 문자열배열로 만들어서 하나씩 c에 담은 상태

결론적으로 c는 char형 (예: ‘5’)

이를 바로 stack.push(c)하면 아스키 코드가 들어가는 것.

 

우리가 원하는 숫자가 들어가게 하기 위해서는 c-48을 해야 실제 숫자로 바뀌어서 들어가짐

for(char c : str.toCharArray()) {

    if(Character.isDigit(c)) stack.push(c-48);

    .....

 

💡 [[ 문자인지, 숫자인지 확인, 결과는 true, false ]]

Character.isLetter(’a’) // true

 

Character.isDigit(’97’) // true

Character.isDigit(97) // false

 

 

💡 연산자 계산(-,+,*,/)

if ~ else if로 넣기

 

'코딩 테스트(JAVA) > 인프런 문제풀이' 카테고리의 다른 글

공주 구하기  (0) 2022.03.16
쇠막대기  (0) 2022.03.16
크레인 인형뽑기(카카오)  (0) 2022.03.16
괄호 문자 제거  (0) 2022.03.16
올바른 괄호  (0) 2022.03.16