https://www.acmicpc.net/problem/10773
처음 도전한 코드(실패)
4,3,0,1,0은 0이 나와서 오예! 하고 돌렸는데, 바로 실패였다.
이유는 0이 연속으로 나왔을 때 오답이 나왔기 때문..
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int K {};
int temp{};
int sum{};
vector<int> numbers{};
cin >> K;
for (int i{ 0 }; i < K; ++i)
{
cin >> temp;
numbers.push_back(temp);
// 0이면 직전 요소를 0으로 만들자
if (i > 0 && numbers.at(i) == 0)
{
replace(numbers.begin(), numbers.end(), numbers.at(i-1), 0);
}
}
for (int i {0}; i < K; ++i)
{
sum += numbers.at(i);
}
cout << sum;
return 0;
}
그래서 계속 고민했다.
일단, 난 벡터에 모든 수를 저장하면서 지워야 하는 수를 0으로 만들고 싶었다. 답은 Sum 을 구하는 거니까.
그런데 0이 연속으로 나왔을 땐 대체 어떻게 해야 하지 싶었다. 30분 더 고민하다가 벡터로 짠 다른 사람들의 코드를 살펴보면서 힌트를 얻고 아래와 같이 결국 수정했다.
정답 코드
0은 애초에 벡터에 저장하지 않았다. 그럼 0 , 0 연속으로 입력해도 벡터 안엔 0이 없기 때문에 직전 수를 pop 할 수 있었다. 흐미..
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int K {};
int temp{};
int sum{};
vector<int> v{};
ios::sync_with_stdio(0);
cin.tie(0);
cin >> K;
// 입력 받기
for (int i{ 0 }; i < K; ++i)
{
cin >> temp;
if (temp == 0)
v.pop_back();
else
v.push_back(temp);
}
// 합 구하기
for (auto i : v)
{
sum += i;
}
cout << sum;
return 0;
}
'백준' 카테고리의 다른 글
[스택, 배열] 28278 : 스택2 (1) | 2023.09.13 |
---|---|
[스택 & 벡터] 28278 (0) | 2023.09.05 |
공백 입력..!! (0) | 2023.08.08 |
(2562번)최댓값 찾고 몇 번째 숫자인지 찾기 (2) | 2023.04.19 |
[버블정렬 & 벡터] 10818번 문제 (0) | 2023.04.19 |