‡ CODING TEST STUDY ‡/º 백준

[백준 10773번 C++] 제로

Trudy | 송연 2023. 9. 9. 19:49

10773번: 제로 (acmicpc.net)

 

10773번: 제로

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

www.acmicpc.net

 


뚱땅뚱땅 비교적(?) 빠르게 써내려간 코드

근데 stack에는 제대로 저장이 다 되는 데 마지막 for문에서 sum을 구하려는 데 스택에 저장된 원소들의 합만 이상하게 나옴

문제의 코드

#include <stack>
#include <string>
#include <iostream>

using namespace std;

int main() {
   stack<int> s;
   int k, n, sum=0;
   
   cin >> k;
   
   for(int i=0; i<k; i++){
      cin >> n;
      
      if(n == 0){
          s.pop();
      }
      else {
          s.push(n);
      }
   }

   
   for(int i=0; i<s.size(); i++){
       sum +=s.top();
       s.pop();
   }

    cout << sum;
    return 0;
    
}

출력문 여러 개 뽑아내다가 알아낸 문제점:

s.pop()을 하니까 s.size()가 계속 달라져서 스택의 전체 합이 구해지지 않았던 것

 

그래서 다음 처럼 바꿔줬다

for(int i=s.size(); i>0; i--){
       sum +=s.top();
       s.pop();
    }

그렇게 완성된 최종 코드는

#include <stack>
#include <string>
#include <iostream>

using namespace std;

int main() {
   stack<int> s;
   int k, n, sum=0;
   
   cin >> k;
   
   for(int i=0; i<k; i++){
      cin >> n;
      
      if(n == 0){
          s.pop();
      }
      else {
          s.push(n);
      }
   }
   
   for(int i=s.size(); i>0; i--){
       sum +=s.top();
       s.pop();
    }
    
    cout << sum << " ";
    return 0;
}

'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글

[백준 1406번 C++] 에디터  (0) 2023.09.09
[백준 1935번 C++] 후위 표기식2  (0) 2023.09.09
[백준 9012번 C++] 괄호  (0) 2023.09.09
[백준 10828번 C++] 스택  (0) 2023.09.08
[백준 17087번 C++] 숨바꼭질 6  (0) 2023.09.02