https://www.acmicpc.net/problem/10773
C++ 안배우고 C와 스택 조금 배운 상태라 코드가 미숙함 (#include <stdio.h>로 c로 풀음)
처음 푼 거
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
using namespace std;
stack <int> s;
int main(){
int k, n, sum;
scanf("%d", &k);
for(int i=0 ; i<k ; i++){
scanf("%d", &n);
if(n!=0)
s.push(n);
else
s.pop();
sum+=s.top();
}
printf("%d",sum);
}
돌아가서 되는 줄 알았는데 k 입력받고 첫 번째 n 입력받고 segmentation fault (core dumped) 뜸
;;;;
내가 무지한 탓이겠지... 내가 틀렸겠지...
고민을 해봄
>> 스택에 있는 값들을 전부 더해주는 방법을 바꿔봄
- 스택에 있는 값이 k개 이하일 수도 있는데 계속해서 더해주는 게 문제인가 싶어 코드를 조금 수정함
<최종제출>
#include <iostream>
#include <stdio.h>
#include <stack>
using namespace std;
stack <int> s;
int main(){
int k, n, sum=0;
scanf("%d", &k);
for(int i=0 ; i<k ; i++){
scanf("%d", &n);
if(n!=0){
s.push(n);
}
else
s.pop();
}
int size=s.size();
for(int i=0 ; i<size ; i++){ //sum 구하는 거 반복문 수정, top한 뒤 pop 해줌
sum+=s.top();
s.pop();
}
printf("%d",sum);
}
1. top 한 뒤에 pop을 해줘야됨
>> top으로 맨 위에 꺼를 가져오고 난 뒤에 그걸 지워줘야 다음 top을 할 수 있음
2. cnt로 카운트 하지말고 그냥 스택 사이즈를 바로 가져옴
>> 이게 더 정확하고 편한 방법
문제해결~
728x90
'백준' 카테고리의 다른 글
백준 1260번 C++ 배열 사용 (0) | 2023.07.06 |
---|---|
백준 4949번 c++ (0) | 2023.07.06 |
백준 1935번 C++ 배열 사용 (0) | 2023.07.06 |
백준 9012번 c++ (0) | 2023.06.25 |
백준 2164 c++ (0) | 2023.01.17 |