티스토리 뷰

#include <stdio.h>
#define M 801

typedef struct Stack {
	int top;
	int arr[M];
}Stack;

int isEmpty(Stack *s) {return s->top == 0;}
void push(Stack *s, int e) {s->arr[s->top++] = e;}
int pop(Stack *s) { return s->arr[--s->top];}
int peek(Stack *s) {return s->arr[s->top-1];}
int cnt(Stack *s) {return s->top;}

int main(void) {
	int n;
	long long int ans = 0;
	Stack s;
	s.top = 0;
	scanf("%d", &n);
	
	while(n--) {
		static long long int tmp = 0;
		scanf("%lld", &tmp);
		if(isEmpty(&s)) push(&s, tmp);
		else {
			if(peek(&s) > tmp) push(&s, tmp);
			else {
				while(peek(&s) <= tmp && !isEmpty(&s)) {
					pop(&s);
				}
				push(&s, tmp);
			}
		}
		ans += cnt(&s)-1;
	} printf("%lld", ans);
	return 0;
}

 

 

풀이 : 스택을 이용합니다!

 

요소를 넣을 때마다 스택의 길이 - 1 을 누적한 것이

옥상 볼 수 있는 횟수입니다!

 

위의 코드는 c++로 적은 것을 c로 바꾼 것 입니다.

 

자세한 설명은 아래 링크에 있습니다.

 

https://h202.tistory.com/225

 

c++ 6198번 옥상 정원 꾸미기 (백준)

#include #define M 80001 class Stack { //Stack 구현 private: int top; int arr[M]; public: Stack() : top(0) {} //생성자 top = 0 초기화 bool isEmpty() {return top == 0;} //비었는가? void push(int e) {arr[top++] = e;} //넣기 int pop() { return a

h202.tistory.com

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함