https://www.acmicpc.net/problem/10773
0이 들어온 경우 제일 최근의 수를 제거하여 맨 마지막 존재하는 모든 수를 더하는 문제.
C++의 vector를 스택처럼 활용하여 0이 들어온 경우 pop해주고 나머지는 push한 후에 다 더하면 된다.
원래라면 C언어로 해보고자 했지만, 솔직히 있는거 가져다 쓰는게 더 좋을거라고 판단해서 C++로 풀었다.
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main () {
ios_base::sync_with_stdio(false);
vector<int> st;
int T, temp;
cin >> T;
while (T--) {
cin >> temp;
if (temp) st.push_back(temp);
else st.pop_back();
}
cout << accumulate(st.begin(), st.end(), 0);
}
C++로 푸신 분들의 코드를 보면 항상 ios_base::sync_with_stdio(false)가 들어가는데, 이게 무엇인지 잘 몰랐는데 C와 C++간의 표준스트림을 동기화 할것인지 아닌지에 관한 코드였다. 동기화 하지 않으면(false로 설정하면) 시간적인 이득이 있다고 하는데..... 이유는 잘 모르겠다. 동기화를 하면 입력을 C의 스트림으로 받아서 C++의 스트림으로 변환하는 과정이 있기라도 한건지...
실제로 유의미한 시간차이가 있긴 하다.
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 2164번 C++ 풀이 (0) | 2021.11.25 |
---|---|
백준 1181번 C, C++ 풀이 (0) | 2021.11.25 |
백준 1009번 C언어 풀이 (0) | 2021.11.11 |
백준 10845번 C언어 풀이 (0) | 2021.11.11 |
백준 10989번 C언어 풀이 (0) | 2021.11.05 |