[백준 10773] 제로 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
이 문제는 잘못 입력된 숫자를 스택을 이용해 제거하면서 최종 합계를 구하는 문제입니다.
문제 이해
- 정수
K
가 주어지며, 이후K
개의 정수가 입력됩니다. - 입력된 정수가
0
이면 가장 최근에 입력된 수를 제거합니다. 0
이 아닌 정수는 스택에 추가합니다.- 모든 입력이 끝난 후, 스택에 남아있는 숫자들의 합을 구해야 합니다.
접근법
- 스택(Stack) 자료구조를 사용하여 숫자를 저장합니다.
0
이 입력되면 스택에서 최근 숫자를 제거합니다.- 모든 입력이 끝난 후, 스택에 남아있는 숫자들을 합산합니다.
예제 시뮬레이션
입력:
1
2
3
4
5
4
3
0
4
0
과정:
3
→ 스택:[3]
0
→ 스택:[]
(최근 수3
제거)4
→ 스택:[4]
0
→ 스택:[]
(최근 수4
제거)
최종 합계는 0입니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace Solution {
class Program {
static void Main(string[] args) {
var t = int.Parse(Console.ReadLine()!);
var stack = new Stack<int>();
for (int i = 0; i < t; i++) {
int input = int.Parse(Console.ReadLine()!);
if (input == 0) stack.Pop();
else stack.Push(input);
}
Console.WriteLine(stack.Sum());
}
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef stack<int> sti;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
sti num;
while (t--) {
int input; cin >> input;
if (input == 0) num.pop();
else num.push(input);
}
ll sum = 0;
while (!num.empty()) {
sum += num.top();
num.pop();
}
cout << sum << '\n';
return 0;
}