반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 참조형 반환타입
- 후위표기식
- www.naver.com치면 발생하는일
- 스프링 빈
- @Tranctional
- TCP/IP 4계층
- 포워드 프록시
- try-catch
- k번째큰수
- 기본형 매개변수
- 싱글톤 패턴
- SOLID원칙
- 전략 패턴
- 팩토리 패턴
- 백준 2164
- 옵저버 패턴
- 빈 타입 조회
- Class Loader
- 자바의 면접
- 쇠막대기
- 팩토리패턴
- removeAll
- 스프링 컨테이너
- 네트워크
- 스프링 싱글톤
- 리버스 프록시
- 스프링
- mvvm패턴
- 참조형 매개변수
- 백준 1935
Archives
- Today
- Total
스파이더 웹 개발
백준 1935 - 후위 표기식 본문
728x90
반응형
후위 표기식 문제이다 후위 표기식이란 연산자가 피연산자 뒤의 위치하는 것을 의미한다
Stack을 활용한다
이제 문제를 살펴보자
문제에서 후위표기식 문자열이 주어지는데 문자열 중 알파벳은 주어지는 숫자와 1:1 매핑관계이다
그러므로 문제에서는 A일 경우 숫자 1을 스택에 넣어주면된다
연산자일 경우 스택에 넣은 값을 끄내 해당연산을 시행한후 값을 다시 스택에 넣어준다
결과 값을 또 다른연산을 만났을경우 계산을 반복하면된다
import java.util.Scanner;
import java.util.Stack;
public class C {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String str = scanner.next();
double[] arr = new double[n];
Stack<Double> st = new Stack<>();
for(int i=0; i<n; i++){
arr[i] = scanner.nextDouble();
}
for(int i=0; i<str.length(); i++){
if(Character.isAlphabetic(str.charAt(i))){
st.push(arr[str.charAt(i) - 'A']);//알파벳에 해당하는 아스키코드 - 65를하여 배열 arr[인덱스]번호를 확인할 수 있다
}else if(str.charAt(i)=='+'){
double temp1 = st.pop();//마지막 앞전에 넣은 숫자를 끄내온다
double temp2 = st.pop();//마지막에 넣은 숫자를 끄내온다
double temp3 = temp2 + temp1; //계산한다
st.push(temp3);//결과 값을 스택어 넣어준다 반복한다
}else if(str.charAt(i)=='-'){
double temp1 = st.pop();
double temp2 = st.pop();
double temp3 = temp2 - temp1;
st.push(temp3);
}else if(str.charAt(i)=='/'){
double temp1 = st.pop();
double temp2 = st.pop();
double temp3 = temp2 / temp1;
st.push(temp3);
}else if(str.charAt(i)=='*'){
double temp1 = st.pop();
double temp2 = st.pop();
double temp3 = temp2 * temp1;
st.push(temp3);
}
}
System.out.printf("%.2f",st.pop());
}
}
결과
6.20
728x90
반응형
Comments