ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8-2: 스택 구현하기
    Stacks, Queues 2018. 10. 25. 21:27

    스택 구현하기

     

    문제


    이 문제에서는 스택을 구현한다. 스택은 다음 세 개의 연산을 지원한다. Push X : 스택에 정수 X를 push한다. 만약 스택이 꽉 차서 push를 할 수 없다면, “Overflow”를 출력한다. Pop : 스택에서 정수 하나를 pop한다. 만약 스택이 비어있어서 pop을 할 수 없다면, “Underflow”를 출력한다. Top : 스택의 top에 있는 정수를 출력한다. 만약 스택이 비어있다면 “NULL”을 출력한다. 크기가 n인 스택에 m개의 연산을 하는 프로그램을 작성하시오. 입력의 편의를 위해서 Push는 “1”, Pop은 “2”, Top은 “3”으로 표현한다. 다음은 크기 4인 스택에 10개의 연산이 입력으로 주어졌을 때의 입력과 출력의 예이다.

    XYZ

     

    입력


    첫째 줄에 스택의 크기 n, 연산의 개수 m이 주어진다. ( 1 <= n <= 100, 1 <= m <= 1,000 ) 두 번째 줄부터 연산이 주어진다. 1은 Push, 2는 Pop, 3은 Top 연산을 의미한다.  

    출력


    연산의 결과를 출력한다.

     

    예제 입력

    4 10
    1 1
    1 2
    1 3
    2
    3
    1 4
    1 5
    3
    1 6
    3

    예제 출력

    2
    5
    Overflow
    5

     

    예제 입력

    4 11
    1 1
    1 2
    1 4
    3
    2
    3
    2
    3
    2
    3
    2

    예제 출력

    4
    2
    1
    NULL
    Underflow


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.StringTokenizer;

    public class StackImpl {

    /**
    *
    * 문제:
    *
    * 이 문제에서는 스택을 구현한다. 스택은 다음 세 개의 연산을 지원한다.
    * Push X : 스택에 정수 X를 push한다. 만약 스택이 꽉 차서 push를 할 수 없다면, “Overflow”를 출력한다.
    * Pop : 스택에서 정수 하나를 pop한다. 만약 스택이 비어있어서 pop을 할 수 없다면, “Underflow”를 출력한다.
    * Top : 스택의 top에 있는 정수를 출력한다. 만약 스택이 비어있다면 “NULL”을 출력한다.
    *
    * 크기가 n인 스택에 m개의 연산을 하는 프로그램을 작성하시오. 입력의 편의를 위해서 Push는 “1”, Pop은 “2”, Top은 “3”으로 표현한다. 다음은 크기 4인 스택에 10개의 연산이 입력으로 주어졌을 때의 입력과 출력의 예이다.
    *
    * XYZ
    *
    * 입력:
    *
    * 첫째 줄에 스택의 크기 n, 연산의 개수 m이 주어진다. ( 1 <= n <= 100, 1 <= m <= 1,000 ) 두 번째 줄부터 연산이 주어진다. 1은 Push, 2는 Pop, 3은 Top 연산을 의미한다.
    *
    *
    * 출력:
    *
    * 연산의 결과를 출력한다.
    *
    *
    * 예제 입력:
    *
    * 4 10
    * 1 1
    * 1 2
    * 1 3
    * 2
    * 3
    * 1 4
    * 1 5
    * 3
    * 1 6
    * 3
    *
    *
    * 예제 출력:
    *
    * 2
    * 5
    * Overflow
    * 5
    *
    *
    * @param args
    */

    public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    StringTokenizer st = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(st.nextToken());
    Stack stack = new Stack(n);
    int m = Integer.parseInt(st.nextToken());

    for (int i=0; i<m; i++){
    StringTokenizer opToken = new StringTokenizer(br.readLine());
    int op = Integer.parseInt(opToken.nextToken());
    if (op ==1){
    //get data info
    int data = Integer.parseInt(opToken.nextToken());
    //perform push.
    if (!stack.push(data)){
    System.out.println("Overflow");
    }
    } else if (op ==2){
    //pop
    if (!stack.pop()){
    System.out.println("Underflow");
    }
    } else {
    //top
    System.out.println(stack.peek());
    }
    }
    }

    public static class Stack{
    int capacity;
    ArrayList<Integer> data;
    public Stack(int size){
    this.capacity = size;
    data = new ArrayList<>();
    }

    public boolean push(int val){
    if (data.size() < capacity){
    //add to end of list.
    data.add(val);
    return true;
    }
    return false;
    }

    public boolean pop(){
    if (data.size() == 0){
    return false;
    }
    //remove last elem.
    data.remove(data.size()-1);
    return true;
    }

    public String peek(){
    if (data.size()==0) return "NULL";
    return String.valueOf(data.get(data.size()-1));
    }
    }
    }


    'Stacks, Queues' 카테고리의 다른 글

    8-8: 히스토그램에서 가장 큰 직사각형 찾기  (0) 2018.10.25
    8-7: 괄호의 값  (0) 2018.10.25
    8-5: 괄호 Valid Parentheses String  (0) 2018.10.25
    8-4: 원형 큐 구현하기  (0) 2018.10.25
    8-3: 큐 구현하기  (0) 2018.10.25
Designed by Tistory.