[백준]스택 - 10828

✅나의 문제 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder out = new StringBuilder();
int n = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
for(int i=0;i<n; i++){
String line = br.readLine();
if(line.startsWith("push")){
stack.push(Integer.parseInt(line.substring(5).trim()));
}else if(line.equals("pop")){
out.append(stack.empty()? -1 : stack.pop()).append('\n');
}else if(line.equals("size")){
out.append(stack.size()).append('\n');
}else if(line.equals("empty")){
out.append(stack.empty()? 1 : 0).append('\n');
}else if(line.equals("top")){
out.append(stack.empty()? -1 : stack.peek()).append('\n');
}
}
System.out.println(out.toString());
}
}

- 먼저 스택을 정의해주고, 입력받을 문자열 개수만큼 for문을 돌린다.
- for문안에 if문을 이용해서 명령어를 구분하고, 그에 맞게 명령어를 처리한다.
- 특히 push는
push 5와 같이 push 이후에 정수로 스택에 넣을 값을 지정해주기 때문에, startsWith() 메서드를 이용하여 명령어가 push로 시작하는지 판별하고, push로 시작한다면 substring으로 push 이후의 글자를 자른다.
스택
- push() : 스택에 데이터를 추가하는 메서드
- pop() : 스택에 들어있는 데이터를 삭제하는 메서드
- peek() : 데이터는 삭제하지 않고 스택 맨 위에 있는 값을 확인하는 메서드
- size() : 현재 스택에 저장되어 있는 요소의 개수를 알려주는 메서드
- empty() : 스택이 비어있는지, 데이터가 들어있는지 확인하는 메서드(true/false)
문자열 입력
- 문자열 입력은
Scanner가 아니라 BufferedReader를 사용했다.
BufferdReader는 문자를 버퍼에 모아서 한꺼번에 읽는 자바의 입력 클래스이다.
- 보통
BufferdReader로 문자열을 입력받고, StringBuilder로 출력을 모은다.
기본 구성
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
자주 쓰는 패턴
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder out = new StringBuilder();
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String line = br.readLine();
out.append(line).append('\n');
}
System.out.print(out.toString());
Scanner vs BufferedReader
- Scanner : 사용 간단하지만 속도가 느림.
- BufferedReader : 라인 단위로 읽고 직접 파싱하며, Scanner보다 빠르다.