728x90
https://www.hackerrank.com/challenges/maximum-element/problem
stack에서 1, 2, 3번 메뉴를 선택했을 때 각 메뉴에 맞는 명령을 실행하도록 하면 된다.
1번 - push
2번 - pop
3번 - stack의 components 중에서 가장 큰 값을 출력한다
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
long long i,j,n,x,index,arr[100001],maxs[100001],top;
int menu;
max = 0;
top = -1;
scanf("%lld",&n);
for(i=0;i<n;i++){
scanf("%d",&menu);
if(menu == 1){
scanf("%lld",&x);
arr[++top] = x;
if(x > max){
max = x;
}
maxs[top] = max;
}
else if(menu == 2){
if(top!=-1){
top--;
if(top!=-1){
max = maxs[top];
}
else{
max = 0;
}
}
}
else if(menu == 3){
printf("%lld\n",maxs[top]);
}
}
return 0;
}
최댓값들에 대한 스택을 생성해 기본 stack에서 pop되면서 일어나는 변화를 반영한다.
1번 메뉴를 선택했을 때 push와 pop 명령을 구현하는 내용 뿐만 아니라 max의 값도 정해지도록 한다.
push를 했을 때 기존의 max값과 push된 새로운 값을 비교해 더 큰 값을 max로 하도록 한다.
pop을 했을 경우에는 스택이 empty stack이 아닌경우에만 pop하도록 하고 pop을 하고 난 이후에 empty stack이 되는 경우에는 max값을 0으로 하고 아닌 경우에는 max값을 최댓값들에 대한 stack에서 top 인덱스에 저장된 값을 max로 한다.
SMALL
'Programming > C C++' 카테고리의 다른 글
Time Conversion (0) | 2020.07.26 |
---|---|
Sock Merchant (0) | 2020.07.19 |
Bon Appetit (0) | 2020.07.12 |
Queue using Two Stacks (0) | 2020.06.14 |
Mini-Max Sum (0) | 2020.06.14 |