문제 내용은 문제에 적힌 기능을 구현해서 입력을 받으면 받은 값 대로 구현한 내용에 넣어 출력시키면 되는데, 오답률이 높은 이유는 출력하는 횟수가 많기 때문에 System.out.println을 사용해 출력하는 방식으로 진행하면 문제를 무조건 틀리게 된다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Stack;
public class Main {
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 count = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < count; i++) {
int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
if (input[0] == 1) {
stack.push(input[1]);
} else {
switch (input[0]) {
case 2:
bw.write((stack.isEmpty() ? -1 : stack.pop()) + "\n");
break;
case 3:
bw.write(stack.size() + "\n");
break;
case 4:
bw.write((stack.isEmpty() ? 1 : 0) + "\n");
break;
case 5:
bw.write((stack.isEmpty() ? -1 : stack.peek()) + "\n");
break;
}
}
}
bw.flush();
bw.close();
br.close();
}
}
조건을 고려해보면 sout으로 출력하는 게 아니라 BufferedWriter에 출력할 내용을 모두 넣은 뒤, “\n” 를 붙여가며 아래로 한 줄씩 내려주면 되는 거고 모든 값을 넣은 뒤에는 bw.flush로 한 번에 출력해주면 끝이다. bw, br.close() 메소드의 경우에는 꼭 사용해야 하는 것은 아니지만
나중에 리소스 누수 방지나, 데이터 손실 방지를 위해 사용해야 하는 거라 왜 안썼냐고 물어볼 때 답해줄 수 있다면 굳이 쓰지 않아도 된다. 그리고 스택의 기능은 생각해보니까 if 쓸 필요 없이, switch만 이용해서 처리해도 됐었는데 값 별로 따로 빠져서 기능 처리하게 만들어주면 끝이다
Leave a Reply