문제
재현이는 재민이를 도와서 동아리 장부를 관리하고 있다.
재현이는 영수증을 모아서 동아리의 지출 금액을 세고 있고, 재민이는 재현이가 부르는 액수를 순서대로 적고 있다.
재현이는 가끔 잘못된 수를 부르는 실수를 하는데, 이 때마다 0을 외쳐서, 가장 최근에 재민이가 쓰고 지우지 않았던 수를 지우게 시킨다.
재현이가 모든 수를 부른 후 재민이가 받아 적은 수의 합은 무엇일까?
풀이방법
스택(Stack) 자료구조의 후입선출(LIFO, Last In First Out)을 이용한다.
재현이가 말하는 숫자를 스택에 집어넣되, 재현이가 0을 말하면 스택에 가장 최근에 입력된 값을 삭제한다.
소스코드
package samsung;
import java.util.*;
public class s_8931 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int test = sc.nextInt();
for(int t = 1; t <= test; t++) {
int n = sc.nextInt();
Stack <Integer> s = new Stack<>();
for(int i = 0; i < n; i++) {
int tmp = sc.nextInt();
if(tmp == 0)
s.pop();
else
s.push(tmp);
}
int sum = 0;
while(!s.isEmpty()) {
int tmp = s.pop();
sum += tmp;
}
System.out.println("#" + t + " " + sum);
}
}
}
출처
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA] 9280. 진용이네 주차타워 (0) | 2020.02.25 |
---|---|
[SWEA] 9229. 한빈이와 Spot Mart (0) | 2020.02.25 |
[SWEA] 8821. 적고 지우기 (0) | 2020.02.25 |
[SWEA] 8741. 두문자어 (0) | 2020.02.25 |
[SWEA] 8658. Summation (0) | 2020.02.25 |
댓글