이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.
문제 설명
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class sec05_04 {
public static int solution(String str) {
Stack<Integer> stack = new Stack<>();
for (Character c : str.toCharArray()) {
if(Character.isDigit(c)) stack.push(Character.getNumericValue(c));
else
{
int right = stack.pop();
int left = stack.pop();
if(c == '+') stack.push(left + right);
else if(c == '-') stack.push(left - right);
else if(c == '*') stack.push(left * right);
else if(c == '/') stack.push(left / right);
}
}
return stack.pop();
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(solution(br.readLine()));
}
}
설명
- 문자열의 각 문자를 순차적으로 탐색한다.
- 숫자인 경우: 해당 숫자를 스택에 푸시(push)한다.
- 연산자인 경우: 스택에서 두 개의 숫자를 팝(pop)하여 꺼낸다.
-첫 번째로 꺼낸 숫자를 right, 두 번째로 꺼낸 숫자를 left라고 한다.
-꺼낸 두 숫자에 대해 연산자를 적용한 결과를 다시 스택에 푸시한다.
예를 들어, c가 +라면 left + right를 스택에 푸시한다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chpater5, 6번 문제(공주 구하기) (0) | 2024.08.12 |
---|---|
[인프런 알고리즘] Chapter 5, 5번 문제(쇠막대기) (0) | 2024.08.11 |
[인프런 알고리즘] Chapter 5, 3번 문제(크레인 인형뽑기(카카오)) (0) | 2024.08.09 |
[인프런 알고리즘] Chapter 5, 2번 문제(괄호문자제거) (1) | 2024.08.07 |
[인프런 알고리즘] Chapter 5, 1번 문제(올바른 괄호) (0) | 2024.08.06 |