상세 컨텐츠

본문 제목

< 백준 BaekJoon : 10773번 제로> C++

C++/Baekjoon

by J2on 2024. 1. 22. 20:27

본문

<< 문제 >> 

https://www.acmicpc.net/problem/10773

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

 

문제의 힌트를 보면 Stack을 사용하는 문제라는 것을 알 수 있다. 

 

간단히 Stack을 구현하고 입력에 따라 Sum에 더하고 빼고를 결정하면 쉽게 해결할 수 있다. 

 

<< 코드 >> 

#include <iostream>
using namespace std;

struct myStack {
  int itemNum = -1;
  int item[1000000];
  int sum = 0;
};

void stackSum(myStack &s1, int input) {
  s1.itemNum++;
  s1.item[s1.itemNum] = input;
  s1.sum += input;
}

void stackZero(myStack &s1) {
  s1.sum -= s1.item[s1.itemNum];
  s1.itemNum--;
}

int main() {
  myStack s1;

  int num;
  cin >> num;

  int input;
  for (int i = 0; i < num; i++) {
    cin >> input;
    if(input == 0){
      stackZero(s1);
    }
    else{
      stackSum(s1, input);
    }
  }

  cout << s1.sum;
}

 

 

 

 

관련글 더보기

댓글 영역