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 |
Tags
- 완전이진트리
- 이분그래프
- 피보나치
- 11724
- dfs
- 도커
- 링킹
- BFS
- 순회
- Java
- 포스트오더
- 포화이진트리
- 자바
- DynamicProgramming
- 프로그래머스
- 웹개발
- 그래프
- 9093
- Bottom Up
- n진법게임
- JAVA_HOME
- 동적계획법
- 이진트리
- 인오더
- 백준
- 연결요소
- 바인딩
- 알고리즘
- 1707
- 전공자따라잡기
Archives
- Today
- Total
물음표 살인마
[백준10828] 스택(stack)이란? 자바로 스택 구현하기 본문
스택이란?
한 쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조
마지막에 넣은 것이 가장 먼저 나오기 때문에 LIFO(Last In First Out) 이라고도 한다.
- push: 스택에 자료를 넣는 연산
- pop: 스택에서 자료를 빼는 연산
- top: 스택의 가장 위에 있는 자료를 보는 연산
- empty: 스택이 비어있는지 아닌지 확인하는 연산
- size: 스택에 저장되어있는 자료의 개수를 알아보는 연산
Java로 스택 구현하기(백준 10828)
int[] arr = new int[10000];
int cur = 0;
자료를 넣을 배열과 스택의
스택의 크기를 담을 변수를 선언해준다.
void push(int x){
arr[cur] = x;
cur++;
}
push: 배열에 입력된 자료를 저장하고
크기를 담은 변수를 1 늘려준다.
int pop(){
if(cur <= 0){
return -1;
}
int result = arr[cur -1];
arr[cur -1] = 0;
cur--;
return result;
}
pop: 스택의 제일 마지막에 입력된 자료를 리턴해주고
크기를 담은 변수를 -1 해준다.
자료가 담겼던 배열의 자리는 0으로 초기화해준다.
스택에 담긴 자료가 없을시엔 -1을 반환한다.
int size(){
return cur;
}
size: 스택에 담긴 자료의 갯수를 반환한다.
int empty(){
return (cur <= 0) ? 1 : 0;
}
empty: 스택이 비었으면 1을, 그렇지 않은 경우에는 0을 리턴한다.
int top(){
return (cur <= 0) ? -1 : arr[cur - 1];
}
top: 스택에 가장 마지막으로 입력된 자료를 반환한다.
스택에 아무 자료도 없을시엔 -1을 반환한다.
백준 문제 풀이를 위한 최종 코드
package stack;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Baekjoon10828 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int x = Integer.parseInt(br.readLine());
Stack stack = new Stack();
for (int i = 0; i < x; i++) {
st = new StringTokenizer(br.readLine(), " ");
String fc = st.nextToken();
switch (fc) {
case "push":
stack.push(Integer.parseInt(st.nextToken()));
break;
case "pop":
System.out.println(stack.pop());
break;
case "size":
System.out.println(stack.size());
break;
case "empty":
System.out.println(stack.empty());
break;
case "top":
System.out.println(stack.top());
break;
}
}
}
}
class Stack {
int[] arr = new int[10000];
int cur = 0;
void push(int x){
arr[cur] = x;
cur++;
}
int pop(){
if(cur <= 0){
return -1;
}
int result = arr[cur -1];
arr[cur -1] = 0;
cur--;
return result;
}
int size(){
return cur;
}
int empty(){
return (cur <= 0) ? 1 : 0;
}
int top(){
return (cur <= 0) ? -1 : arr[cur - 1];
}
}
'개발지식 > Algorithm' 카테고리의 다른 글
[백준10845] 큐(queue)란? 자바로 큐 구현하기 (0) | 2022.08.22 |
---|---|
[백준9093] 단어뒤집기 세가지 방법으로 풀어보기 (0) | 2022.08.16 |
알고리즘 기초 (0) | 2022.08.15 |
[DP] 피보나치 수열을 이용해 동적프로그래밍(Dynamic Programming) 이해하기 (0) | 2021.10.12 |
[백준1000] A+B : Scanner와 BufferedReader의 차이 (0) | 2021.07.18 |
Comments