문제 해석
첫번째 줄에 받을 명령의 수(N)을 입력받고, N개만큼 아래의 명령을 수행한다.
1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
3: 스택에 들어있는 정수의 개수를 출력한다.
4: 스택이 비어있으면 1, 아니면 0을 출력한다.
5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다.
코드
import java.io.*;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
static LinkedList<Integer> stack = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine()); //명령어의 수
while(N --> 0){
st = new StringTokenizer(br.readLine());
String command = st.nextToken();
if(command.equals("1")){
stack.addFirst(Integer.parseInt(st.nextToken()));
}else if(command.equals("2")){
sb.append(stack.isEmpty() ? -1 : stack.pollFirst()).append("\n");
}else if(command.equals("3")){
sb.append(stack.size()).append("\n");
}else if(command.equals("4")){
sb.append(stack.isEmpty() ? 1 : 0).append("\n");
}else if(command.equals("5")){
sb.append(stack.isEmpty()? -1 : stack.getFirst()).append("\n");
}
}
br.close();
System.out.println(sb);
}
}
import java.io.*;
import java.util.Stack;
public class Main {
static Stack<Integer> stack = new Stack<>();
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);
}
static void solution(String query){
char c = query.charAt(0); //첫번째 문자는 명령어
switch (c){
//case 1의 경우 query.substring(2);를 한 이유는 공백도 문자로 포함하기 때문이다 1 X 형태이기 때문에 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;
}
}
}
pop(): 스택에서 가장 위에 있는 항목을 제거
push(element): element 하나를 스택의 가장 윗 부분에 추가
peek(): 스택의 가장 위에 있는 항목을 반환
isEmpty(): 스택이 비어 있을 때에 true를 반환
위와 같이 코드를 짰더니 시간과 메모리를 덜 잡는 것을 알 수 있다.
결과
느낀 점