일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
Tags
- knapsack Problem
- Silver
- 3D RPG
- LEVEL2
- Euclidean
- level3
- trie
- Zenject
- two pointer
- binary search
- SWEA
- 프로세스 상태
- Bronze
- 8-Puzzle
- dirtyflag pattern
- effective C++
- solid 원칙
- BOJ
- Project
- 프로그래머스
- Unity
- algorithm
- Flyweight Pattern
- PrefixSum
- programmers
- Modern C++
- stack
- level1
- Gold
- BFS
Archives
- Today
- Total
Patrick's Devlog
[BOJ/C++] 제로(10773번) 본문
1. 개요
https://www.acmicpc.net/problem/10773
1-1. 문제 설명
재민이는 동아리 회식을 위해 장부를 관리하는 중이다. 재현이는 재민이를 도와 돈 관리 중인데, 재현이는 실수를 자주한다. 잘못된 수를 부를 때마다 0을 외쳐, 가장 최근에 재민이가 쓴 숫자를 지우게끔 한다. 재민이는 모든 수를 받아 적은 후 수의 합을 알고싶어 한다. 프로그램을 작성해보자.
1-2. 제한 사항
- 첫 줄에 K가 주어지며, K는 1 이상 100,000이하 자연수
- K개의 줄에 정수가 1개씩 주어짐
- 정수는 0에서 1,000,000 사이 값이며, 0일 경우 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 씀
- 정수가 0일 경우 지울 수 있는 수가 있음을 보장
2. 구현
2-1. 풀이
숫자를 저장할 배열을 생성하고 index를 통해 0을 입력했을 때, 가장 끝을 가리키는 index의 숫자를 없앤다.
2-2. 코드
#include <iostream>
using namespace std;
constexpr size_t MAX_NUM = 100000;
int nums[MAX_NUM];
int main() // 10773 번
{
int count, num, result = 0, index = 0;
cin >> count;
for (int i = 0; i < count; i++) {
cin >> num;
if (num != 0) {
nums[index++] = num;
result += num;
}
else if (num == 0 && index != 0) {
result -= nums[--index];
}
}
cout << result << "\n";
return 0;
}
'Algorithm > Algorithms Practice' 카테고리의 다른 글
[BOJ/C++] 숫자 카드(10815번) (0) | 2022.09.01 |
---|---|
[BOJ/C++] 수 정렬하기 3(10989번) (0) | 2022.08.31 |
[SWEA/C++] 이진수 표현(10726번) (0) | 2022.08.23 |
[SWEA/C++] 쉬운 거스름돈(1970번) (3) | 2022.08.22 |
[SWEA/C++] 사탕분배(13736번) (0) | 2022.08.21 |