반응형
안녕하세요. BlockDMask 입니다.
오늘의 포스팅을 시작하도록하겠습니다.
오늘은 기본 스택을 구현하는 문제입니다.
C, C++ 두가지를 이용하여 풀었습니다.
0. 제목
백준 10828 스택
BOJ 10828 스택
1. 문제설명
정수를 저장하는 스택을 구현하는 문제입니다.
push N : 정수 N을 스택에 넣습니다.
pop : 스택의 맨 위의 정수를 빼고, 출력. 없는경우 -1 출력.
size : 스택의 정수의 개수 출력.
empty : 스택이 비어있으면 1, 아니면 0 출력.
top : 스택의 가장 위의 정수를 출력, 없는경우 -1 출력
2. 풀이과정
C++ 은 STL 에서 stack이 구현 되어있기 때문에 구현되어있는 stack을 이용하였고,
C는 직접 구현을 했습니다.
3. 함수설명
C++의 stack 의 멤버인 empty() 의 return 값은 bool 타입으로 true, false 입니다.
C는 주석으로 처리했습니다.
주석을 길게 쓰는 것을 좋아하지 않아서. "습니다" 체를 쓰지 않았습니다.
양해 부탁드립니다.
4. 코드
T1) C로 구현했을때.
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include<stdio.h> #include<string.h> #define TRUE 1 //1반환 #define FALSE 0 //0반환 #define MINUS -1 //-1반환 #define MAX_SIZE 10000 //스택 배열 사이즈 typedef struct _stack{ //스택 구조체. int arr[MAX_SIZE]; int top; } Stack; void StackInit(Stack * sp){ //스택 초기화 함수 sp->top = -1; } int IsEmpty(Stack * sp){ //스택이 비어있는지 확인 if(sp->top == -1) return TRUE; return FALSE; } int Size(Stack *sp){ //스택의 size 반환 return sp->top + 1; } int IsFull(Stack * sp){ //스택이 꽉 차있는지 확인 if(sp->top + 1 >= MAX_SIZE) return TRUE; return FALSE; } void Push(Stack * sp, int data){ //스택의 push if(IsFull(sp)==TRUE) return; //top을 하나 올린 후 data 삽입 sp->arr[++(sp->top)] = data; } int Pop(Stack * sp){ //스택의 pop. if(IsEmpty(sp) == TRUE) return MINUS; //top이 가리키는 값을 반환 후 top을 하나 내림. return sp->arr[(sp->top)--]; } int Peek(Stack *sp){ //스택의 맨위의 인자를 반환합니다. if(IsEmpty(sp) == TRUE) return MINUS; return sp->arr[sp->top]; } int main(void){ int i; char str[6]; Stack stack; int n, num; scanf("%d", &n); fgetc(stdin); //버퍼 비우기 StackInit(&stack); //stack 초기화. for(i=0; i<n; i++){ scanf("%s", str); fgetc(stdin); //버퍼 비우기. if(!strcmp(str, "push")){ //push 인 경우 scanf("%d", &num); fgetc(stdin); //버퍼 비우기. Push(&stack, num); }else if(!strcmp(str, "pop")){ //pop인 경우 printf("%d\n", Pop(&stack)); }else if(!strcmp(str, "empty")){ //empty인경우 printf("%d\n", IsEmpty(&stack)); }else if(!strcmp(str, "size")){ //size인 경우 printf("%d\n", Size(&stack)); }else if(!strcmp(str, "top")){ //top인 경우 printf("%d\n", Peek(&stack)); } } return 0; } | cs |
T2) C++ 로 구현했을 때.
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 | #include<iostream> #include<stack> #include<string> using namespace std; int main(void){ int n; cin >> n; stack<int> st; //int type의 stack 선언. string str; for(int i=0; i<n; i++) { cin >> str; if (str == "push") { //push 명령어 일때. int num; cin >> num; st.push(num); } else if (str == "pop") { //pop 명령어 일때. if (!st.empty()) { cout << st.top() << endl; st.pop(); } else { cout << "-1" << endl; } } else if (str == "size") { //size 명령어 일때. cout << st.size() << endl; } else if (str == "empty") { //empty 명령어 일때. if (st.empty()) { cout << "1" << endl; } else { cout << "0" << endl; } } else if (str == "top") { //top 명령어 일때. if (!st.empty()) { cout << st.top() << endl; } else { cout << "-1" << endl; } } } return 0; } | cs |
5. 인증
T1) C로 구현했을때.
T2) C++로 구현했을 때.
반응형
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[CodeGround] 극단적인 수 (0) | 2017.08.04 |
---|---|
[백준 1929] 소수 구하기 (에라토스테네스의 체) (1) | 2017.08.03 |
[백준 1181] 단어정렬 (vector, array) (1) | 2017.08.02 |
[백준 1475] 방 번호 (0) | 2017.08.01 |
[백준 11050] 이항계수 1 (반복, 재귀) (0) | 2017.07.31 |
[백준 1157] 단어 공부 (map) (1) | 2017.07.29 |
[백준 2750] 수 정렬하기 (버블정렬, 삽입정렬) (0) | 2017.07.28 |
[백준 1152] 단어의 개수 (strtok) (2) | 2017.07.27 |