어흥

[해커랭크] Maximum Element (C++) 본문

알고리즘/HackerRank

[해커랭크] Maximum Element (C++)

라이언납시오 2021. 1. 28. 14:48
728x90
반응형

문제 링크: www.hackerrank.com/challenges/maximum-element/problem?utm_campaign=challenge-recommendation&utm_medium=email&utm_source=24-hour-campaign

 

Maximum Element | HackerRank

Given three types of queries, insert an element, delete an element or find the maximum element in a stack.

www.hackerrank.com

1. 주의할 점

- 최대값을 어떤 방식으로 저장하고 있을 것인가

- Stack에서 Pop한 이후, Stack이 비었다면 최대값은?

 

2. 구현

- Info 형태의 구조체를 담는 Stack S를 생성한다

- 현재까지의 최대값을 담고 있는 curMax 값을 0으로 초기화한다(입력값들은 모두 자연수이므로)

- 1번 동작을 수행하는 경우, 새로 담을 원소 값을 A에 저장하고, A와 curMax값을 비교하여 큰 값을 curMax에 할당한다. Info 구조체에서 val은 현재 원소, maxi는 이때까지의 최대값을 담는다

- 2번 동작을 수행하는 경우, Stack에서 원소 1개를 뺀다. 해당 작업 이후, Stack이 비었다면 curMax에는 0을, 아니라면 curMax에는 Stack의 Top에 있는 원소의 curMax를 할당한다

- 3번 동작을 수행하는 경우, curMax를 출력한다

 

#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;

struct info{
    int val, maxi;
};
info tmp;

int main() {
    stack<info> s;
    int query,num,a,curMax = 0;
    cin>>query;
    while(query--){
        cin>>num;
        if(num==1){
            cin>>a;
            tmp.val =a;
            curMax = max(curMax, a);
            tmp.maxi = curMax;
            s.push(tmp);
        }
        else if(num==2){
            s.pop();
            if(s.empty())
                curMax = 0;
            else
                curMax = s.top().maxi;
        }
        else 
            cout<<curMax<<'\n';
    }
    return 0;
}
728x90
반응형
Comments