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 == -1) return -1; return pstack->arr[(pstack->top)--]; } Data peek(Stack * pstack){ if(pstack->top == -1) return -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
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[C++ 동적할당] Variable Sized Arrays (배열) (0) | 2017.07.08 |
---|---|
[C 자료구조] Stack - Balanced Brackets (0) | 2017.07.07 |
[C 자료구조] Linked Lists -Reverse a doubly linked list (1) | 2017.07.06 |
[C 자료구조] Heap - QHEAP1 (0) | 2017.07.05 |
[C 자료구조] Tree - Level Order Traversal (0) | 2017.07.05 |
[C 자료구조] Linked Lists - Reverse a linked list (0) | 2017.07.04 |
[C 자료구조] Linked Lists - Inserting a Node Into a Sorted Doubly Linked List (0) | 2017.06.29 |
[C 자료구조] Queue - Queue using Two Stacks (0) | 2017.06.27 |