Daily Pogle

SWEA 8931. 제로 [D3] - Stack 본문

알고리즘/SW Expert Academy

SWEA 8931. 제로 [D3] - Stack

pogles 2023. 1. 16. 16:51

SW Expert Academy

 

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);
        }
    }
}