10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
뚱땅뚱땅 비교적(?) 빠르게 써내려간 코드
근데 stack에는 제대로 저장이 다 되는 데 마지막 for문에서 sum을 구하려는 데 스택에 저장된 원소들의 합만 이상하게 나옴
문제의 코드
#include <stack>
#include <string>
#include <iostream>
using namespace std;
int main() {
stack<int> s;
int k, n, sum=0;
cin >> k;
for(int i=0; i<k; i++){
cin >> n;
if(n == 0){
s.pop();
}
else {
s.push(n);
}
}
for(int i=0; i<s.size(); i++){
sum +=s.top();
s.pop();
}
cout << sum;
return 0;
}
출력문 여러 개 뽑아내다가 알아낸 문제점:
s.pop()을 하니까 s.size()가 계속 달라져서 스택의 전체 합이 구해지지 않았던 것
그래서 다음 처럼 바꿔줬다
for(int i=s.size(); i>0; i--){
sum +=s.top();
s.pop();
}
그렇게 완성된 최종 코드는
#include <stack>
#include <string>
#include <iostream>
using namespace std;
int main() {
stack<int> s;
int k, n, sum=0;
cin >> k;
for(int i=0; i<k; i++){
cin >> n;
if(n == 0){
s.pop();
}
else {
s.push(n);
}
}
for(int i=s.size(); i>0; i--){
sum +=s.top();
s.pop();
}
cout << sum << " ";
return 0;
}
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 1406번 C++] 에디터 (0) | 2023.09.09 |
---|---|
[백준 1935번 C++] 후위 표기식2 (0) | 2023.09.09 |
[백준 9012번 C++] 괄호 (0) | 2023.09.09 |
[백준 10828번 C++] 스택 (0) | 2023.09.08 |
[백준 17087번 C++] 숨바꼭질 6 (0) | 2023.09.02 |