반응형
https://www.acmicpc.net/problem/10773
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
코드
#include <iostream>
using namespace std;
const long long COUNT = 100000;
long long arr[COUNT] = { };
int main()
{
long long input, k, sum = 0;
int num = 0;
cin >> k;
for (int i = 0; i < k; i++)
{
cin >> input;
if (input == 0 && num > 0)
{
arr[num] = 0;
num--;
}
else if (input > 0)
{
arr[num] = input;
num++;
}
}
for (int j = 0; j < num; j++)
sum += arr[j];
cout << sum;
return 0;
}
풀이
k개의 데이터를 장부에 입력하는데 0을 입력하는 경우 가장 최근의 쓴 수를 지우고 0이 아닐 경우 그 값을 입력한다. k개의 데이터를 입력한 후 남은 데이터의 합을 출력하는 문제이다.
스택의 방식이다. 스택은 후입선출(LIFO) 방식으로 값을 지울 때 가장 최근에 입력한 값을 지운다.
num 변수는 배열에 입력 가능한 인덱스 위치를 저장하고 0이 입력되면 인덱스의 이전 위치를 가리키도록 한다.
최종적으로 배열에 남은 데이터의 값들을 모두 더해 출력한다.
+) 예제 2 시뮬레이션
- [1]
- [1,3]
- [1,3,5]
- [1,3,5,4]
- [1,3,5] (0을 불렀기 때문에 최근의 수를 지운다)
- [1,3] (0을 불렀기 때문에 그다음 최근의 수를 지운다)
- [1,3,7]
- [1,3] (0을 불렀기 때문에 최근의 수를 지운다)
- [1] (0을 불렀기 때문에 그다음 최근의 수를 지운다)
- [1,6]
반응형
'문제 해결 > BaekJoon' 카테고리의 다른 글
[백준] [C++] 3058번 짝수를 찾아라 (0) | 2023.01.13 |
---|---|
[백준] [C++] 10809번 알파벳 찾기 (0) | 2023.01.13 |
[백준] [C++] 3040번 백성 공주와 일곱 난쟁이 (0) | 2023.01.12 |
[백준] [C++] 5176번 대회 자리 (0) | 2023.01.12 |
[백준] [C++] 2693번 N번째 큰 수 (0) | 2023.01.12 |