알고리즘/SW Expert Academy
SWEA 8931. 제로 [D3] - Stack
pogles
2023. 1. 16. 16:51
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
이 문제는 Stack 을 이용하여 문제를 해결해야한다.
이 문제를 해결하는데 기본적인 stack 개념만 가지고 있으면된다.
- 한 테스트 케이스 안에서 여러 금액을 입력받는다.
- 금액을 0으로 적으면 최근에 입력한 금액을 지운다는 의미이다.
- 0 을 이용해 제거한 금액을 제외하고 입력한 금액의 합을 구한다.
먼저 0 이외의 금액을 입력하면 stack 에 push 된다. 만약 0 의 금액을 입력하면 가장 최근에 push 된 값을 pop 하는 방식이다. 로직이 간단하므로 전체코드를 올리기로 한다
[Java] - 해당문제는 java, c, c++ 만 지원한다
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int K = sc.nextInt();
int stack[] = new int[K];
int top = -1;
int sum = 0;
for (int i=0; i < K; i++){
int money = sc.nextInt();
if (money != 0) { // 금액이 있으면 push
stack[++top] = money;
} else { // 잘못써서 0 이면 pop
stack[top--] = 0; // 최근위치인 top 의 값을 제거하고 top을 1 내려야한다.
}
}
for (int index=0; index < K; index++){
sum += stack[index];
}
System.out.printf("#%d %d\n", test_case, sum);
}
}
}