문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
특이한 규칙이 적용되는 야구 경기의 점수를 기록하고 있다. 경기 시작 시에는 빈 기록지로 시작한다.
operations이 주어지는데, operations[i]는 기록지에 적용해야 하는 i번째 연산이며 다음 중 하나이다.
모든 연산을 적용한 후 레코드에 있는 모든 점수의 합계를 반환해라.
#1
Input: ops = ["5", "2", "C", "D", "+"]
Output: 30
Explanation:
"5" - 기록에 5를 더하고, 기록은 지금 [5]이다.
"2" - 기록에 2를 더하고, 기록은 지금 [5, 2]이다.
"C" - 이전 기록을 무효하고 삭제하고, 기록은 지금 [5]이다.
"D" - 기록에 2 * 5 = 10 더하고, 기록은 지금 [5, 10]이다.
"+" - 기록에 5 + 10 = 15 더하고, 기록은 지금 [5, 10, 15]이다.
총합은 5 + 10 + 15 = 30이다.
#2
Input: ops = ["5", "-2", "4", "C", "D", "9", "+", "+"]
Output: 27
#3
Input: ops = ["1", "C"]
Output: 0
class Solution {
public int calPoints(String[] operations) {
LinkedList<Integer> list = new LinkedList<>();
int sum = 0;
for(String op : operations){
switch(op){
case "C":
sum -= list.removeLast();
break;
case "D":
int item = list.getLast();
list.addLast(item * 2);
sum += item * 2;
break;
case "+":
int value = list.get(list.size() - 2) + list.getLast();
list.addLast(value);
sum += value;
break;
default:
list.addLast(Integer.parseInt(op));
sum += Integer.parseInt(op);
break;
}
}
return sum;
}
}