Algorithm/PS

[BOJ] 10773 - 제로

준레논 2024. 4. 29. 23:30

출처: https://www.acmicpc.net/problem/10773


How to solve?

Main Problem: 0을 입력할 때마다 최근에 쓴 수를 지워야 함

Solve Idea: Stack을 사용한다.

0이 아닐때는 push로 값을 대입하고, 0일 때는 pop을 이용하여 stack의 top에 있는 값을 지운다.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX 100001

int Stack[MAX];
int top = -1;

void push(int item);
int pop();

int main()
{
	int iArrayLen;
	int iInputNum;
	int iStack[MAX];
	int iSum = 0;
	int iDel;

	scanf("%d", &iArrayLen);

	for (int i = 0; i < iArrayLen; i++) {
		scanf("%d", &iInputNum);

		if (iInputNum == 0) {
			iDel = pop();
		}
		else {
			push(iInputNum);
		}
	}

	for (int i = 0; i < top + 1; i++) {
		iSum += Stack[i];
	}
	printf("%d", iSum);

	return 0;
}

void push(int item)
{
	Stack[++top] = item;
 }

int pop()
{
	return Stack[top--];
}

 

몇달 전 이 문제를 보았을 때는 어떻게 접근 해야할지 감도 못잡았는데,,

학교 자료구조 시간에 Stack을 배우고나니 부끄러움이 찾아오네요...

알고리즘 공부 열심히 해야겠다!

 

'Algorithm > PS' 카테고리의 다른 글

[Algorithm] BFS란?  (0) 2026.02.09
[BOJ] 11720 - 숫자의 합  (0) 2026.01.01