μ΅κ·Ό, ν κΈ°μ μμ λΌμ΄λΈ μ½ν λ₯Ό 보λλ° λͺ ννκ² νμ§ λͺ»νλ λ¬Έμ λ₯Ό λ€μ νμ΄λ³΄λ €κ³ νλ€.
쑰건
1. λ¬Έμμ΄μ κ³μ°ν μ μλ μμΌλ‘ μ£Όμ΄μ§λ€.
2. μ«μλ λͺ¨λ μμλ‘ μ£Όμ΄μ§λ€.
3. μ°μ°μ +, -, * λ§ μ£Όμ΄μ§λ€.
ν μ€νΈ μΌμ΄μ€
1.
μ λ ₯κ° : "20+33-2*5"
κ²°κ³Ό : 43
2.
μ λ ₯κ° : "5-7*2+3"
κ²°κ³Ό : -6
νμ΄
μ«μμ μ°μ°μλ₯Ό λΆλ¦¬νκΈ°
μμμ κ³μ°νκΈ° μν΄μλ μ«μμ μ°μ°μλ₯Ό λΆλ¦¬νλ κ²μ΄ νμνλ€κ³ μκ°νλ€.
λ¬Έμμ΄μ λ€λ£¨λλ° μ μ©ν μλ° μ κ·μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν΄μ λΆλ¦¬ν λ€, 리μ€νΈμ λ΄λλ€.
public int sol(String input) {
List<String> list = new ArrayList<>();
Pattern p = Pattern.compile("\\d+|\\D");
Matcher m = p.matcher(input);
while (m.find()) {
String split = m.group();
list.add(split);
}
return result;
}
μ κ·μ λΆλΆμ, μ«μ νΉμ μ«μκ° μλ νλͺ©μ μΆμΆνλ μμ΄λ€.
μ κ³Όμ μ κ±°μΉλ©΄ "20+33-2*5"
μ΄ μ
λ ₯λμμ λ,
리μ€νΈμ ["20" , "+" , "33" , "-" , "2" , "*" , "5"]
μ κ°μ΄ μ±μμ§λ€.
μ΄μ , μ°μ°μ μ°¨λ‘λλ‘ νλ©΄ λ κ² κ°μ§λ§ μμμ κ³±μ μ΄ μ°μ μΌλ‘ μ°μ°λμ΄μΌ νλ€.
λ°λΌμ, κ³±μ μ°μ°μ νλ² μ²λ¦¬ν΄μ£Όμ΄μΌ νλ€. ( μ΄ λΆλΆμ λΌμ΄λΈ μ½ν μμ κ°κ³Όνλ€κ°.. λΉν©νλ€..)
public int sol(String input) {
List<String> list = new ArrayList<>();
Pattern p = Pattern.compile("\\d+|\\D");
Matcher m = p.matcher(input);
while (m.find()) {
String split = m.group();
list.add(split);
}
Stack<String> s = new Stack<>();
for (int i = 0; i < list.size(); i++) {
if (!s.isEmpty() && s.peek().equals("*")) {
// * μ°μ°μ μ κ±°
s.pop();
// κ³μ°ν μ κ°μ Έμ€κΈ°
String pop = s.pop();
// κ³±μ
κ³μ° ν λ€μ μ€νμ μ
λ ₯
s.push(String.valueOf(Integer.parseInt(pop) * Integer.parseInt(list.get(i))));
} else {
s.push(list.get(i));
}
}
return result;
}
κ³±μ μ°μ°μ μ€ν μλ£κ΅¬μ‘°λ₯Ό νμ©νλ©΄ κ°λ¨νκ² ν΄κ²°ν μ μλ€.
리μ€νΈμ μ μ₯λ μμλ₯Ό μννλ€κ°, μ€νμ κΌλκΈ°μ "*"
κ° μλ κ²½μ°
"*"
μ§μ μ μ€νμ μ
λ ₯λμλ μμ μ
λ ₯ν μλ₯Ό κ³±νλ€ μ
λ ₯ν΄μ£Όλ©΄ λλ€.
κ·Έλ¬λ©΄, μ€νμ ["20" , "+" , "33" , "-" , "10" ]
μ κ°μ΄ κ³±μ
μ΄ κ³μ°λμ΄ κ³±μ
μ°μ°μκ° μ¬λΌμ§ μμλ§ λ¨μμκ² λλ€.
public int sol(String input) {
Stack<String> s = new Stack<>();
List<String> list = new ArrayList<>();
Pattern p = Pattern.compile("\\d+|\\D");
Matcher m = p.matcher(input);
while (m.find()) {
String split = m.group();
list.add(split);
}
for (int i = 0; i < list.size(); i++) {
if (!s.isEmpty() && s.peek().equals("*")) {
// * μ°μ°μ μ κ±°
s.pop();
// κ³μ°ν μ κ°μ Έμ€κΈ°
String pop = s.pop();
// κ³±μ
κ³μ° ν λ€μ μ€νμ μ
λ ₯
s.push(String.valueOf(Integer.parseInt(pop) * Integer.parseInt(list.get(i))));
} else {
s.push(list.get(i));
}
}
int result = Integer.parseInt(s.get(0));
for (int i = 1; i < s.size(); i += 2) {
String op = s.get(i);
switch (op) {
case "+":
result += Integer.parseInt(s.get(i + 1));
break;
case "-":
result -= Integer.parseInt(s.get(i + 1));
}
}
return result;
}
μ΄μ μ°μ°μλ₯Ό μμλλ‘ κ³μ°νλ©΄ λλ€.
μ λ ₯κ°μ μ μμ μΌλ‘ κ³μ°λλ μμμ΄ λ€μ΄μ΄μ 보μ₯νλ―λ‘
μ°μ°μλ μ€νμ νμλ²μ§Έ μΈλ±μ€μ μ‘΄μ¬ν¨λ 보μ₯ν μ μλ€.
λ°λΌμ, μ°μ°μμ λ°λΌ switch
λ¬Έλ²μ μ¬μ©νλ, if
쑰건문μ νμ©νλ ν΄λΉνλ μ°μ°μ ν΄μ£Όλ©΄ μλ£λλ€.