Stack은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)로 데이터를 저장하는 형식을 말한다.
주어진 N(2<= N <=100)개의 수를 순서대로 Stack에 넣은 후 하나씩 꺼내 화면에 출력하시오.
입력
2
5
1 2 3 4 5
5 4 2 3 1
출력
#1 5 4 3 2 1
#2 1 3 2 4 5
package BOJ;
import java.io.*;
import java.util.StringTokenizer;
public class MyStack{
private static int[] stack;
private static int pointer;
// 스택 초기화
public static void init(int size){
stack = new int[size];
pointer = 0;
}
// 스택이 가득 찼는지 확인
public static boolean stackIsFull(){
return pointer == stack.length;
}
// 스택이 비어 있는지 확인
public static boolean stackIsEmpty(){
return pointer == 0;
}
// 스택에 값 추가
public static boolean stackPush(int value){
// 스택이 가득 차있다면 false
if(stackIsFull()){
return false;
}
// 아니라면 가장 뒤에 넣기
// ++pointer 해버리면 ArrayIndexOutOfBoundsException
stack[pointer++] = value;
return true;
}
// 스택에서 값 추출
public static Integer stackPop(){
// 스택이 비어있다면 nullPointException 나기에 null 반환하여 처리
if(stackIsEmpty()) return null;
// 비어 있지 않다면 --pointer 인덱스의 값을 반환하도록 함
// pointer-- 해버리면 마찬가지로 ArrayIndexOutOfBoundsException
return stack[--pointer];
}
public static void main(String[] args) throws IOException{ // 스트림 예외 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 테스트 케이스 수
int T = Integer.parseInt(br.readLine());
// 스택의 크기
int size = Integer.parseInt(br.readLine());
// 스택 초기화
init(size);
// 결과 담을 빌더 선언
StringBuilder sb = new StringBuilder();
// 테스트 케이스
for(int testcase = 1; testcase <= T; testcase++){
sb.append("#").append(testcase).append(" ");
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < stack.length; i++){
stackPush(Integer.parseInt(st.nextToken()));
}
while(!stackIsEmpty()){
sb.append(stackPop()).append(" ");
}
sb.append("\n");
}
// StringBuilder 출력 및 스트림 닫기
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
'코딩테스트 > Java' 카테고리의 다른 글
[BaekJoon][자료 구조][Stack][Java] 2563: 색종이 (0) | 2024.08.10 |
---|---|
[BaekJoon][자료 구조][Stack][Java] 10799 : 쇠막대기 (0) | 2024.08.10 |
[BaekJoon][자료 구조][Stack][Java] 1935 : 후위 표기식2 (0) | 2024.08.10 |
[BaekJoon][자료 구조][Stack][Java] 10773 : 제로 (0) | 2024.08.10 |
[BAEKJOON] 2798.블랙잭 (1) | 2024.03.14 |