10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

처음에 짰던 코드는 오류가 났다.

equals와 contains를 헷갈렸기 때문이다.

 

리스트에 "push 1" 이라고 들어가있어서. 

equals("push") 하게되면 false가 나온다.

포함되어있는지 확인해주는 contains("push")를 썼다면 괜찮았을 것 같다.

이 문제는 시간제한이 0.5초이기때문에

System.out.println()을 쓰게되면 시간제한에 걸린다.

그래서 BufferedWriter를 사용했다.

 

 

 

 

구글링을 통해 도움을 받았다.

리스트를 만들지 않고,

입력 받는 즉시 처리하도록 

코드를 짰다.

 

String 타입의 act라는 변수 안에 하나씩 입력받고,

입력받은 값이 push라면 스택에 넣을 숫자도 입력받는다.

아니라면 각각에 맞는 기능들을 수행하도록 했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        Stack<Integer> stack = new Stack<>();
        int N = sc.nextInt();
 
        for(int i = 0; i < N; i++){
            String act = sc.next();
            switch (act){
                case "push":
                    stack.push(sc.nextInt());
                    break;
 
                case "pop":
                    try {
                        bw.write(stack.pop()+"\n");
                    }catch (Exception e){
                        bw.write("-1\n");
                    }
                    break;
 
                case "size":
                    bw.write(stack.size()+"\n");
                    break;
 
                case "empty":
                    if(stack.empty())
                        bw.write("1\n");
                    else
                        bw.write("0\n");
                    break;
 
                case "top":
                    try {
                        bw.write(stack.peek()+"\n");
                    }catch (Exception e){
                        bw.write("-1\n");
                    }
                    break;
            }
        }
        bw.close();
    }
}
cs

+ Recent posts