<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[C 자료구조] Stack - Maximum Element

BlockDMask 2017. 6. 26. 10:15

0) 제목

Hackerrank 의 Stack 부분의 Maximum Element 문제입니다.

C언어를 이용하여 풀었습니다.


1) 문제설명

처음 input으로 N을 받습니다. 그 다음 N개의 쿼리문을 입력받는데,

1 - push

2 - pop

3 - peek

인 규칙으로 쿼리문을 받으라고 설명에 나와있습니다. 


2) 풀이과정

동적할당을 이용하여 스택에 사용하는 배열의 크기를 지정해줬습니다.

초기에 입력받은 N에 의해서 쿼리의 갯수가 정해진다고 했을때,

push의 최대값(최대로 사용할 용량 크기)이 N이라고 생각했기 떄문에,

동적할당을 이용했습니다.


3) 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include<stdio.h>
#include<stdlib.h>
 
enum {PUSH=1, POP, PEEK};
 
typedef long long Data;
 
typedef struct stack{
    Data * arr;
    int top;
} Stack;
 
void StackInit(Stack * pstack, int N){
    pstack->top = -1;    
    //동적할당. 
    pstack->arr = (Data *)malloc(sizeof(Data)*N);
}
 
void FreeStack(Stack * pstack){
    //메모리 해제 
    free(pstack->arr);
}
long long max(long long a, long long b){
    if(a>=b) return a;
    else return b;
}
 
void push(Stack * pstack, Data data){
    if(pstack->top==-1){
        pstack->arr[++(pstack->top)] = data;    
    }else{
        pstack->arr[(pstack->top)+1= max(pstack->arr[(pstack->top)], data);
        (pstack->top)++;
    }
    
}
Data pop(Stack * pstack){
    if(pstack->top == -1return -1;
    return pstack->arr[(pstack->top)--];
}
Data peek(Stack * pstack){
    if(pstack->top == -1return -1;
    return pstack->arr[pstack->top];
}
 
int main(void){
    int N, i, num;
    Data data;
    Stack stack;
    scanf("%d"&N);
    StackInit(&stack, N);
    
    for(i=0; i<N; i++){
        scanf("%d"&num);
        switch(num){
            case PUSH:
                scanf("%lld"&data);
                push(&stack, data);
                break;
            case POP:
                pop(&stack);
                break;
            case PEEK:
                printf("%lld\n",peek(&stack));
                break;
        }
    }
    
    FreeStack(&stack);
    return 0;
}
cs

경로 : DashBoard>Data Structures>Stacks>Maximum Element

문제 출처 : [해커랭크] https://www.hackerrank.com/challenges/maximum-element/problem