
명령을 입력할 횟수 (N)을 입력한다.
N번만큼 명령을 입력할 수 있는데 명령의 개수는 1~5번까지 존재함.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Stack_2_1 {
static LinkedList<Integer> stack = new LinkedList<>();
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
while(N --> 0){
solution(br.readLine());
}
br.close();
System.out.println(sb);
}
private static void solution(String query) {
char c = query.charAt(0); //첫번째 문자는 명령어
switch (c){
//substring(2)를 한 이유는 공백도 문자로 포함하기 때문에 입력을 1 3 이런식으로 하기 때문에 사용자가 입력을 원하는 x번의 인덱스는 2이다.
case '1' :stack.push(Integer.parseInt(query.substring(2))); return;
case '2' : sb.append(stack.isEmpty()? - 1 : stack.pop()).append("\n");return;
case '3' : sb.append(stack.size()).append("\n"); return;
case '4' :sb.append(stack.isEmpty() ? 1 : 0).append("\n");return;
case '5' : sb.append(stack.isEmpty() ? -1 : stack.peek()).append("\n");return; //정수가 있을때 맨위의 정수를 출력하는 것
default: break;
}
}
}
static LinkedList<Integer> stack = new LinkedList<>();
해당 코드는 자료 구조로서의 스택을 구현하기 위해 LinkedList를 사용하는 것
정수 값을 저장하는데에 사용되는 스택을 말한다
자바에서 제공하는 연결 리스트를 구현한 클래스임 삽입,삭제,검색 등과 같은 연산을 할 수 있음
BufferedReader 를 사용하여 입력을 받는다.
명령어의 수 N을 입력 받는다
N번 반복하면서 명령어를 입력받고 'solution' 메서드를 호출한다.
마지막으로 StringBuilder 에 저장된 결과를 출력
push 메서드를 이용하여 인덱스 번호 2번에 해당하는 정수를 stack에 추가한다
isEmpty 메서드를 사용하여 스택이 비어있는지 확인하고 스택이 비어있다면 -1 아니라면 pop() 을 통해 스택에서 맨 위의 정수를 빼내고 추가한다. (동시에 제거함)
스택에 들어있는 정수의 개수를 size()를 통하여 반환하고 추가
마찬가지로 스택이 비어있는지 확인하고 결과를 출력한다.
스택이 비어있는지 확인하고 맨 위의 정수를 출력한다 하지만 peek()를 이용함
peek() 는 스택의 맨 위에 있는 요소를 반환한다. 다만 스택에서 해당 요소를 제거하지 않고 맨 위의 요소를 반환하는 것
스택이 비어있는 경우에는 NoSuchElementException 이 발생할 수 있음
pop()은 스택의 맨 위에 있는 요소를 제거하고 반환한다. 스택에서 요소를 꺼내서 제거하기 때문에 해당 요소는 스택에서 사라진다. 마찬가지로 스택이 비어있는 경우에는 NoSuchElementException 이 발생할 수 있음