후위식 연산(postfix)
2022. 3. 16. 23:03ㆍ코딩 테스트(JAVA)/인프런 문제풀이
설명
후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 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 |