Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 인공지능
- 검색어최적화
- 리스트구현
- let과var차이
- 스프링
- 텐서플로우
- BOJ
- 파이썬
- 알고리즘
- 고쳐야해!
- SWEA
- 연결리스트구현
- jnut
- spa 라우팅
- 타입변수
- 드래그방지
- Java
- 리눅스
- 리스트
- 딥러닝
- BFS
- 타입제한
- 머신러닝
- 백준
- BOJ17070
- 파이프 옮기기
- 주피터
- SPA
- Spring
- 서버사이드랜더링
Archives
- Today
- Total
林's
[자료구조] C++로 만드는 stack 해답 본문
이론 공부후 바로 문제를 풀어봅시다!
#define _CRT_SECURE_NO_WARNINGS #include cstdio; using namespace std; int stack[100001]; // 스택을 위한 넉넉한 여유공간 int top = -1; // top(stack pointer): 스택의 꼭대기를 가리키는 인덱스 // 스택은 데이터를 위로 쌓아가므로 빈상태는 0이 아니라 -1을 가리킴 // 넣을 때마다 ++ 해주고 뺄때마다 --해주면 되겠지? int empty() { return top == -1 ? 1 : 0; // 스택의 꼭대기가 초기상태인 -1을 가리키면 스택이 빈상태 } int full() { return top == 100000 ? 1 : 0; // 인덱스가 최대값인 10만이 되면 꽉찬것임 } int getSize() // 스택의 꼭대기(top) 가 가리키는 곳을 읽으면 스택 크기를 알 수 있겠지? { int size = top + 1; // top이 0을 가리킬 때 1개니까 top이 x를 가리키면 크기는 x+1이 겠지? return size; } int getTop() // 스택은 비어있을 때랑 꽉차 있을 때를 항상 유의하면서 짜야해! { if (empty()) // 스택이 비어있을 수도 있어 { return -1; } else { return stack[top]; // 안 비어 있으면 그냥 꼭대기에 있는 값을 주면 돼. } } void push(int x) // top이 가리키는 곳은 스택의 꼭대기라고 했어. 거기엔 값이 이미 들어있지 { // 데이터를 넣는 작업인 push 를 수행하려고 하니 스택 포인터를 위로 한칸 먼저 올리고 if (full()) return; // 거기에 값을 넣어야겠지? 그래서 stack[top++]로 하면 꼭대기 값이 덮어씌워질 거야. stack[++top] = x; } void pop() // 스택은 항상 꼭대기에서 값을 꺼낼 수 있어. { if (empty()) // 비어있으면 못 꺼내겠지? { printf("-1\n"); } else { printf("%d\n", stack[top--]); // 그게 아니라면 꺼낸 다음(stack[top])에 스택 포인터를 아래로 한칸 내리면 될거야(top--) 이건 이 두 문장을 합친것이지. } } int main() { int N; // 명령어의 개수 int x; // 스택에 넣을 데이터 char comm[11]; // 명령어 문자열을 위한 공간 scanf("%d", &N); // 명령어 개수 입력받기 while (N--) // 명령어 개수만큼 반복(반복문이 N번 실행되면, N이 0이 되면서 while문 탈출!) { scanf("%s", comm); // 명령어 입력받기 if (comm[0] == 'p' && comm[1] == 'u') // push { scanf("%d", &x); push(x); } else if ((comm[0] == 'p') && (comm[1] == 'o')) // pop { pop(); } else if (comm[0] == 't') // top { printf("%d\n", getTop()); } else if (comm[0] == 's') // size { printf("%d\n", getSize()); } else if (comm[0] == 'e') // is empty? { printf("%d\n", empty()); } } return 0; }
'프로그래밍 > Etc' 카테고리의 다른 글
안전먹거리 사이트 소스코드 (0) | 2019.08.20 |
---|---|
오구오구 어이스턴트 웹 모바일 소스코드 (0) | 2019.08.20 |
[Windows 10] 업데이트 이후 폴더의 날짜분류 기준을 없애는 방법 (0) | 2019.08.15 |
[JAVA] 지수를 표현하는 예제 (0) | 2014.08.02 |
Comments