- 30분 이내 성공
https://www.acmicpc.net/problem/28278
스택 2
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 1024 MB | 53618 | 19892 | 16494 | 37.357% |
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
- 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
- 3: 스택에 들어있는 정수의 개수를 출력한다.
- 4: 스택이 비어있으면 1, 아니면 0을 출력한다.
- 5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다.
입력
첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000)
둘째 줄부터 N개 줄에 명령이 하나씩 주어진다.
출력을 요구하는 명령은 하나 이상 주어진다.
출력
출력을 요구하는 명령이 주어질 때마다 명령의 결과를 한 줄에 하나씩 출력한다.
나의 답안
/*
* 1. 주어지는 명령어에 따라 처리하는 프로그램
*
* switch-case 문을 사용한다
**/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
// 입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 테스트 개수
int T = Integer.parseInt(br.readLine());
// 스택 생성
Stack<Integer> stack = new Stack<>();
// T번 반복
for(int i = 0; i < T; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String s = st.nextToken();
switch (s){
case "1":
stack.push(Integer.valueOf(st.nextToken()));
break;
case "2":
if(!stack.empty()){
System.out.println(stack.pop());
} else {
System.out.println(-1);
}
break;
case "3":
System.out.println(stack.size());
break;
case "4":
if(stack.empty()){
System.out.println(1);
} else {
System.out.println(0);
}
break;
case "5":
if(!stack.empty()){
System.out.println(stack.peek());
} else {
System.out.println(-1);
}
break;
}
}
}
}
- 흠 근데 메모리랑, 시간이 너무 많이 소요되는 것 아닌가 ... 줄일 수 없나 더 생각해보아야겠다.
'코딩테스트 > Baekjoon' 카테고리의 다른 글
[백준] 17413번: 단어 뒤집기 2/ Java 11 (1) | 2025.06.05 |
---|---|
[백준] 1406번: 에디터/ Java 11 (0) | 2025.05.30 |
[백준] 10799번: 쇠막대기/ Java 11 (0) | 2025.05.30 |
[백준] 1874번: 스택 수열/ Java 11 (0) | 2025.05.29 |
[백준] 4949번: 균형잡힌 세상/ Java 11 (0) | 2025.05.29 |