백준

백준 10773번 C++

solfa 2023. 1. 17. 04:10

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