Programming/C C++

Maximum Element

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