성애는 이번 학기에 전공을 정말 많이 듣는다. 이로 인해 거의 매일을 과제를 하면서 보내고 있다. 그런데도 과제가 줄어들 기미가 보이지 않는데, 바로 분단위로 과제가 추가되고 있기 때문이다. 다행히 과제 제출 기한은 학기가 끝날 때까지이다. 너무나도 많은 과제를 하다가 미쳐버린 성애는 아래와 같은 규칙으로 과제를 해 나가고 있다.
성애는 과제를 받자마자 이 과제가 몇 분이 걸릴지 정확하게 알 수 있고, 성애가 제출한 과제는 무조건 만점을 받는다.
성애는 이번 학기에 자기가 받을 과제 점수를 예상해보고 싶다. 하지만 과제 점수를 예상하는 지금도 과제가 추가되고 있기에 여유를 부릴 수가 없다. 여러분이 성애가 받을 과제 점수를 구해주자!
첫째 줄에 이번 학기가 몇 분인지를 나타내는 정수 N이 주어진다. (1 ≤ N ≤ 1,000,000)
두번째 줄부터 N줄 동안은 학기가 시작하고 N분째에 주어진 과제의 정보가 아래의 두 경우 중 하나로 주어진다.
성애가 받을 과제 점수를 출력한다.
과제를 우선 점수와 해결시간 두 개의 field를 가진 클래스로 만들었다.
새로운 과제가 주어지면, Stack에 넣는다.
그렇지 않고 과제가 주어지지 않으면 주어진 과제를 해결한다.
그렇게 해서 완료되는과제의 점수의 합을 출력하면 된다.
import java.util.*;
import java.io.*;
//import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;// = new StringTokenizer(br.readLine());
final int NUMBER_OF_MINUTE = Integer.parseInt(br.readLine());
Stack<Homework> homeworkStack = new Stack<>();
int totalScore = 0;
for (int i = 0; i < NUMBER_OF_MINUTE; i++) {
st = new StringTokenizer(br.readLine());
if (st.nextToken().charAt(0) == '1') {
int score = Integer.parseInt(st.nextToken());
int minute = Integer.parseInt(st.nextToken());
if (minute == 1) {
totalScore += score;
} else {
homeworkStack.push(new Homework(score, minute - 1));
}
} else if (!homeworkStack.isEmpty()) {
Homework temp = homeworkStack.pop();
temp.minute--;
if (temp.minute == 0) {
totalScore += temp.score;
} else {
homeworkStack.push(temp);
}
}
}
sb.append(totalScore);
sb.append("\n");
bw.write(sb.toString());
bw.flush();
br.close();
bw.close();
}
}
class Homework {
int score;
int minute;
public Homework() {
}
public Homework(int score, int minute) {
this.score = score;
this.minute = minute;
}
}