• toc {:toc}

문제

λ‚˜μ½”λ” κΈ°μž₯ μž¬λ―Όμ΄λŠ” 동아리 νšŒμ‹μ„ μ€€λΉ„ν•˜κΈ° μœ„ν•΄μ„œ μž₯λΆ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” 쀑이닀.

μž¬ν˜„μ΄λŠ” 재민이λ₯Ό λ„μ™€μ„œ λˆμ„ κ΄€λ¦¬ν•˜λŠ” 쀑인데, μ• μ„ν•˜κ²Œλ„ 항상 μ •μ‹ μ—†λŠ” μž¬ν˜„μ΄λŠ” λˆμ„ μ‹€μˆ˜λ‘œ 잘λͺ» λΆ€λ₯΄λŠ” 사고λ₯Ό 치기 μΌμ‘€μ˜€λ‹€.

μž¬ν˜„μ΄λŠ” 잘λͺ»λœ 수λ₯Ό λΆ€λ₯Ό λ•Œλ§ˆλ‹€ 0을 μ™Έμ³μ„œ, κ°€μž₯ μ΅œκ·Όμ— μž¬λ―Όμ΄κ°€ μ“΄ 수λ₯Ό μ§€μš°κ²Œ μ‹œν‚¨λ‹€.

μž¬λ―Όμ΄λŠ” μ΄λ ‡κ²Œ λͺ¨λ“  수λ₯Ό λ°›μ•„ 적은 ν›„ κ·Έ 수의 합을 μ•Œκ³  μ‹Άμ–΄ ν•œλ‹€. 재민이λ₯Ό λ„μ™€μ£Όμž!

μž…λ ₯

첫 번째 쀄에 μ •μˆ˜ Kκ°€ μ£Όμ–΄μ§„λ‹€. (1 ≀ K ≀ 100,000)

이후 K개의 쀄에 μ •μˆ˜κ°€ 1κ°œμ”© μ£Όμ–΄μ§„λ‹€. μ •μˆ˜λŠ” 0μ—μ„œ 1,000,000 μ‚¬μ΄μ˜ 값을 κ°€μ§€λ©°, μ •μˆ˜κ°€ β€œ0” 일 κ²½μš°μ—λŠ” κ°€μž₯ μ΅œκ·Όμ— μ“΄ 수λ₯Ό μ§€μš°κ³ , 아닐 경우 ν•΄λ‹Ή 수λ₯Ό μ“΄λ‹€.

μ •μˆ˜κ°€ β€œ0”일 κ²½μš°μ— μ§€μšΈ 수 μžˆλŠ” μˆ˜κ°€ μžˆμŒμ„ 보μž₯ν•  수 μžˆλ‹€.

좜λ ₯

μž¬λ―Όμ΄κ°€ μ΅œμ’…μ μœΌλ‘œ 적어 λ‚Έ 수의 합을 좜λ ₯ν•œλ‹€. μ΅œμ’…μ μœΌλ‘œ 적어낸 수의 합은 231-1보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

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

풀이

μŠ€νƒμ˜ κΈ°λ³Έ 원리λ₯Ό μ‚¬μš©ν•˜λŠ” 문제라 μ–΄λ ΅μ§€λŠ” μ•ŠμŒ.

μŠ€νƒ STLμ‚¬μš©ν•œ 풀이

#include <bits/stdc++.h>
 
using namespace std;
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie();
    int K;
    cin >> K;
    stack<int> s;
    while(K--){
        int p;
        cin >> p;
        if(p != 0){
            s.push(p);
        }
        else{
            if(!s.empty()){
                s.pop();
            }
        }
    }
    int sum = 0;
    while(!s.empty()){
        sum += s.top();
        s.pop();
    }
    cout << sum << endl;
    return 0;
}

λ²‘ν„°λ‘œ ν’€μ΄ν•œ 문제

// using vector
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
	int num, value, sum = 0;
	vector<int> vec;
 
	cin >> num;
	for (size_t i = 0; i < num; i++)
	{
		cin >> value;
		if (value == 0)
			vec.pop_back();
		else
			vec.push_back(value);
	}
	for (size_t i = 0; i < vec.size(); i++)
	{
		sum += vec[i];
	}
	cout << sum << endl;
	return 0;
}