๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1918)
< ํ์ ํ๊ธฐ์ >
๋ฌธ์ ํ์ด
์ฐ์ ์์๊ฐ (๊ดํธ), (*,/), (+,-) ์์ด๋ฏ๋ก ์์๋๋ก ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พผ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Stack;
public class _1918_ { // ํ์ ํ๊ธฐ์
static ArrayList<String> arr;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
Stack<String> stack = new Stack<>();
arr = new ArrayList<>();
// (, )
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ')') {
while (!stack.peek().equals("(")) {
arr.add(stack.pop());
}
checkPriority("*", "/");
checkPriority("+", "-");
stack.pop();
stack.add(arr.get(0));
arr.clear();
} else {
stack.add(Character.toString(str.charAt(i)));
}
}
// *, /
init(stack);
checkPriority("*", "/");
// +, -
checkPriority("+", "-");
System.out.println(arr.get(0));
}
private static void init(Stack<String> stack) {
arr.clear();
while (!stack.isEmpty()) {
arr.add(stack.pop());
}
}
private static void checkPriority(String op1, String op2) {
Stack<String> stack2 = new Stack<>();
for (int i = arr.size() - 1; i >= 0; i--) {
String temp = arr.get(i);
if (arr.get(i).equals(op1) || arr.get(i).equals(op2)) {
temp = stack2.pop();
temp += arr.get(i - 1);
temp += arr.get(i);
i -= 1;
}
stack2.add(temp);
}
init(stack2);
}
}
๋ณ์)
str : ์ค์ ํ๊ธฐ์
stack : Stack <String>
arr : ArrayList <String>
์ค์ ํ๊ธฐ์์ ์ ๋ ฅ๋ฐ์ ํ ๊ดํธ, (*,/), (+,-) ์์ผ๋ก ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พผ๋ค.
์ค์ ํ๊ธฐ์์ ์ํํ๋ฉด์ stack์ ๊ฐ์ ๋ฃ๋๋ค. ๋ง์ฝ ๊ฐ์ด ')' ๋ผ๋ฉด ๊ดํธ ์์ ๊ฐ์ ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ฅธ๋ค.
1) '('์ ๋ง๋ ๋๊น์ง stack์์ pop ํ ๊ฐ์ ArrayList์ ์ ์ฅ
2) ๊ดํธ ์์ ๊ฐ์ด ArrayList์ ์ ์ฅ๋ ๊ฒ์ด๋ฏ๋ก checkPriority ํจ์๋ฅผ ์ด์ฉํด *, / ์ฐ์ฐ์๋ฅผ ๋จผ์ ํ์ ํ๊ธฐ์์ผ๋ก ๊ต์ฒด
3) checkPriority ํจ์๋ฅผ ์ด์ฉํด +, - ์ฐ์ฐ์๋ฅผ ํ์ ํ๊ธฐ์์ผ๋ก ๊ต์ฒด
4) stack์์ '(' ์ ๊ฑฐ ํ ์์์ ๊ตฌํ ํ์ ํ๊ธฐ์์ stack์ ์ถ๊ฐ
5) ๋ค์ ์์ ์ ์ํด ArrayList ์ด๊ธฐํ
๊ดํธ๋ฅผ ํ์ ํ๊ธฐ์์ผ๋ก ๊ณ ์น ํ *, /๋ฅผ ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ฅธ๋ค.
1) init ํจ์๋ฅผ ํตํด stack์ ์๋ ๊ฐ์ ArrayList์ ์ ์ฅ
2) checkPriority ํจ์๋ฅผ ์ด์ฉํด *, / ์ฐ์ฐ์๋ฅผ ํ์ ํ๊ธฐ์์ผ๋ก ๊ต์ฒด
๋ง์ง๋ง์ผ๋ก +,-๋ฅผ ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ฅธ๋ค.
1) init ํจ์๋ฅผ ํตํด stack์ ์๋ ๊ฐ์ ArrayList์ ์ ์ฅ
2) checkPriority ํจ์๋ฅผ ์ด์ฉํด +,- ์ฐ์ฐ์๋ฅผ ํ์ ํ๊ธฐ์์ผ๋ก ๊ต์ฒด
ArrayList์ ์๋ ๊ฐ์ด ์ต์ข ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๋ ์ ์ด๋ฏ๋ก ๊ฐ์ ์ถ๋ ฅํ๋ค.
init(Stack <String> stack)
stack์ ์๋ ๊ฐ์ pop ํด์ ArrayList์ ์ ์ฅ
checkPriority(String op1, String op2)
๋จผ์ , ์๋ก์ด stack์ ์ ์ธํ๋ค.
ArrayList์๋ ์๋ ์๊ณผ ๋ฐ๋๋ก ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก ArrayList๋ฅผ ๋ค์์๋ถํฐ ์ํํ๋ค. ๋ง์ฝ ๊ฐ์ด ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์จ ์ฐ์ฐ์์ ๊ฐ๋ค๋ฉด stack์์ ํผ์ฐ์ฐ์ 1๊ฐ, ์ฐ์ฐ์, ArrayList์ ๋ค์ ๊ฐ์ธ ํผ์ฐ์ฐ์ 1๊ฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ง๋ค์ด stack์ ์ ์ฅํ๋ค. ๊ฐ์ด ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์จ ์ฐ์ฐ์์ ๊ฐ์ง ์๋ค๋ฉด ๋ฐ๋ก stack์ ์ ์ฅํ๋ค.
๋ชจ๋ ์ํ์ ๋ง์น ๋ค init ํจ์๋ฅผ ํตํด stack์ ๊ฐ์ ArrayList๋ก ์ฎ๊ธด๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 11437_LCA (0) | 2024.02.19 |
---|---|
[Baekjoon] 8911_๊ฑฐ๋ถ์ด (1) | 2024.02.16 |
[Baekjoon] 6986_์ ์ฌํ๊ท (1) | 2024.02.14 |
[Baekjoon] 2312_์ ๋ณต์ํ๊ธฐ (2) | 2024.02.13 |
[Baekjoon] 14225_๋ถ๋ถ์์ด์ ํฉ (0) | 2024.02.12 |