본문 바로가기
백준(C언어)/23년 4월

[C] 백준 - 10773번: 제로

by C0MPAS 2023. 4. 10.

4월 10일(월) - 스택 (10773번)

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

최초 생각 정리

- 직전 10828번 문제에서 구현한 스택을 토대로 풀이를 진행

- 0이 입력되는 경우, pop()을 호출

- 0이 아닌 값이 입력되는 경우, push(입력값)을 호출

- 최종적으로는 변수 sum에다가 stack[i]값들을 다 더해서 출력

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

x

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>

int stack[100001];
int top = -1;

void push(int num)
{
	if (top >= 100000 - 1)
	{
		return;
	}
	top++;
	stack[top] = num;
}

void pop()
{
	if (top < 0)
	{
		return;
	}
	stack[top] = 0;
	top--;
}

int main(void)
{
	int K;
	scanf("%d", &K);

	int num;
	for (int i = 0; i < K; i++)
	{
		scanf("%d", &num);
		if (num == 0)
		{
			pop();
		}
		else
		{
			push(num);
		}
	}

	int sum = 0;
	for (int i = 0; i < top + 1; i++)
	{
		sum = sum + stack[i];
	}

	printf("%d", sum);
	return 0;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

'백준(C언어) > 23년 4월' 카테고리의 다른 글

[C] 백준 - 4949번: 균형잡힌 세상  (0) 2023.04.12
[C] 백준 - 9012번: 괄호  (0) 2023.04.11
[C] 백준 - 10828번: 스택  (0) 2023.04.07
[C] 백준 - 13305번: 주유소  (0) 2023.04.06
[C] 백준 - 24060번: 병합 정렬 1  (0) 2023.04.05

댓글