첫 번째 시도
런타임 에러(ArrayIndexOutOfBounds)
❓ next()와 nextLine() 차이
💡
next() : 공백 이전까지 입력받은 문자열을 반환
nextLine() : Enter 이전까지 입력받은 문자열을 반환
때문에 next()를 사용하면 공백 이전까지 입력을 받으므로 'push X'를 입력했을 때 push까지 입력을 받았다
두 번째 시도
시간 초과
❓ Scanner와 BufferedReader의 특성
💡
이 문제는 시간 제한이 0.5초이다
InputStreamReader : 문자열을 한 글자 단위로 읽기 때문에 긴 문자열을 읽는 데에 비효율적이다
BufferedReader: InputStreamReader + 버퍼링 기능을 추가 / 라인 단위로 입력을 받음 / 공백 인식
일정한 크기의 데이터를 한 번에 읽어서 버퍼에 보관한 후, 사용자 요청 시 읽어 온다
Scanner: 공란과 줄바꿈을 입력 값의 경계로 인식
BufferedReader의 버퍼 사이즈가 훨 크기 때문에 속도가 훨 빠르다
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Stack st = new Stack();
for (int i = 0; i < n + 1; i++) {
String s = sc.nextLine();
if (s.contains("push")) {
String[] push = s.split(" ");
st.push(Integer.parseInt(push[1]));
}
else if (s.equals("pop")) {
if (st.isEmpty()) {
System.out.println("-1");
} else {
System.out.println(st.pop());
}
}
else if (s.equals("size")) {
System.out.println(st.size());
}
else if (s.equals("empty")) {
if (st.isEmpty()) {
System.out.println("1");
} else {
System.out.println("0");
}
}
else if (s.equals("top")) {
if (!st.isEmpty()) {
System.out.println(st.peek());
} else {
System.out.println("-1");
}
}
}
}
}
세 번째 시도
런타임 에러(NullPointer)
❓ for문의 범위 설정
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));
int n = Integer.parseInt(br.readLine());
Stack st = new Stack();
for (int i = 0; i < n + 1; i++) {
String s = br.readLine();
if (s.contains("push")) {
String[] push = s.split(" ");
st.push(Integer.parseInt(push[1]));
}
else if (s.equals("pop")) {
if (st.isEmpty()) {
System.out.println("-1");
} else {
System.out.println(st.pop());
}
}
else if (s.equals("size")) {
System.out.println(st.size());
}
else if (s.equals("empty")) {
if (st.isEmpty()) {
System.out.println("1");
} else {
System.out.println("0");
}
}
else if (s.equals("top")) {
if (!st.isEmpty()) {
System.out.println(st.peek());
} else {
System.out.println("-1");
}
}
}
}
}
네 번째 시도
성공!
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));
int n = Integer.parseInt(br.readLine());
Stack st = new Stack();
for (int i = 0; i < n; i++) {
String s = br.readLine();
if (s.contains("push")) {
String[] push = s.split(" ");
st.push(Integer.parseInt(push[1]));
}
else if (s.equals("pop")) {
if (st.isEmpty()) {
System.out.println("-1");
} else {
System.out.println(st.pop());
}
}
else if (s.equals("size")) {
System.out.println(st.size());
}
else if (s.equals("empty")) {
if (st.isEmpty()) {
System.out.println("1");
} else {
System.out.println("0");
}
}
else if (s.equals("top")) {
if (!st.isEmpty()) {
System.out.println(st.peek());
} else {
System.out.println("-1");
}
}
}
}
}
'Etc > Algorithm' 카테고리의 다른 글
[자료 구조] 스택(Stack)과 큐(Queue) (0) | 2022.07.24 |
---|---|
[Algorithm] 재귀(Recursive Function) (0) | 2022.07.21 |
[JAVA] 백준 11399번: ATM (0) | 2022.06.28 |
[JAVA] 백준 2751번: 수 정렬하기 2 (0) | 2022.06.27 |
[JAVA] 백준 2752번: 세수정렬 (0) | 2022.06.26 |
댓글