◆C#/C# : 백준 문제 풀이

[백준] C++ & C# 제로 (10773번)

진2_ 2024. 9. 21. 13:30
728x90
반응형

[백준] C++ & C# 제로 (10773번) 실버 4

 

 

📝 문제

 

나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재민이는 정말 고지식하게 모든 수를 받아 적은 후, 그 수가 "0"이면, 가장 최근에 쓴 수를 지우는 방식으로 모두 적어두었다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주는 프로그램을 작성하시오.

 

 

🔎 입력

 

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

 

🔎 출력

 

재민이가 적은 수의 합을 출력한다.

 

 

🎀 입출력 예시

 

 

정답 

 

C++

#include <iostream>
#include <vector>  // vector를 사용하기 위해 필요
using namespace std;

int main() 
{
    int n;
    cin >> n;
    
    vector<int> arr;  // vecter -> vector로 수정
    int total = 0;
    
    // 입력 및 처리
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        if (num == 0 && !arr.empty()) {
            arr.pop_back();  // 0이 나오면 마지막에 추가된 값을 제거
        } else {
            arr.push_back(num);  // 0이 아닐 경우 값을 배열에 추가
        }
    }
    
    // 남은 값의 합 계산
    for (int i = 0; i < arr.size(); i++) {
        total += arr[i];
    }
    
    // 최종 결과 출력
    cout << total;
    
    return 0;
}

 

C#

 

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        int K = int.Parse(Console.ReadLine());
        Stack<int> stack = new Stack<int>();

        for (int i = 0; i < K; i++)
        {
            int num = int.Parse(Console.ReadLine());
            if (num == 0 && stack.Count > 0)
            {
                stack.Pop();
            }
            else
            {
                stack.Push(num);
            }
        }

        int sum = 0;
        foreach (int num in stack)
        {
            sum += num;
        }

        Console.WriteLine(sum);
    }
}
728x90
반응형