ν•΄λ²„λ‹ˆ 2023. 11. 22. 09:45
λ°˜μ‘ν˜•

 

 

문제

https://www.acmicpc.net/problem/10866

 

10866번: 덱

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≤ N ≤ 10,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© 주어진닀. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€

www.acmicpc.net

 

 

 

 

 

 

 

 

 

 

 

 

 

 

풀이

덱의 μ‚¬μš©λ²•μ„ μˆ™μ§€ν•˜λ©΄ ν’€ 수 μžˆλŠ” λ¬Έμ œμ΄λ‹€. 

 

 

덱 μ‚¬μš©λ²• 

https://dovnaldisn.tistory.com/96

 

[자료ꡬ쑰] 덱(Deque)

덱(Deque)μ΄λž€? μ–‘μͺ½ λμ—μ„œ μ‚½μž…κ³Ό μ‚­μ œκ°€ κ°€λŠ₯ν•œ μžλ£Œκ΅¬μ‘°μ΄λ‹€. μ„ μž…μ„ μΆœ(FIFO), ν›„μž…μ„ μΆœ(LIFO) κ°œλ…μ΄ λͺ¨λ‘ 적용이 λ˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€. Javaμ—μ„œ Deque은 java.util.Deque μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•΄ κ΅¬ν˜„ν•  수

dovnaldisn.tistory.com

 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Deque;
import java.util.LinkedList;

public class Main {
    /**
     * μ •μˆ˜ Xλ₯Ό 덱의 μ•žμ— λ„£λŠ”λ‹€.
     * 
     * @param x
     * @param deque
     */
    public void pushFront(int x, Deque<Integer> deque) {
        deque.offerFirst(x);
    }

    /**
     * μ •μˆ˜ Xλ₯Ό 덱의 뒀에 λ„£λŠ”λ‹€.
     * 
     * @param x
     * @param deque
     */
    public void pushBack(int x, Deque<Integer> deque) {
        deque.offerLast(x);
    }

    /**
     * 덱의 κ°€μž₯ μ•žμ— μžˆλŠ” 수 λΉΌκΈ°, μ—†λŠ” 경우 -1
     * 
     * @param deque
     * @return
     */
    public int popFront(Deque<Integer> deque) {
        if (deque.isEmpty()) {
            return -1;
        } else {
            return deque.pollFirst();
        }
    }

    /**
     * 덱의 κ°€μž₯ 뒀에 μžˆλŠ” 수 λΉΌκΈ°, μ—†λŠ” 경우 -1
     * 
     * @param deque
     * @return
     */
    public int popBack(Deque<Integer> deque) {
        if (deque.isEmpty()) {
            return -1;
        } else {
            return deque.pollLast();
        }
    }

    /**
     * 덱에 λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수
     * 
     * @param deque
     * @return
     */
    public int dequeSize(Deque<Integer> deque) {
        return deque.size();
    }

    /**
     * 덱이 λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0
     * 
     * @param deque
     * @return
     */
    public int empty(Deque<Integer> deque) {
        if (deque.isEmpty()) {
            return 1;
        } else {
            return 0;
        }
    }

    /**
     * 덱의 κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜ 좜λ ₯, μ—†λŠ” 경우 -1 좜λ ₯
     * 
     * @param deque
     * @return
     */
    public int viewFront(Deque<Integer> deque) {
        if (deque.isEmpty()) {
            return -1;
        } else {
            return deque.peekFirst();
        }
    }

    /**
     * 덱의 κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜ 좜λ ₯, μ—†λŠ” 경우 -1 좜λ ₯
     * 
     * @param deque
     * @return
     */
    public int viewBack(Deque<Integer> deque) {
        if (deque.isEmpty()) {
            return -1;
        } else {
            return deque.peekLast();
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        Main m = new Main();
        Deque<Integer> deque = new LinkedList<>();

        int num = Integer.parseInt(br.readLine());
        int number;

        for (int i = 0; i < num; i++) {
            String input = br.readLine();
            String[] inputStr = input.split(" ");

            switch (inputStr[0]) {
                case "push_front":
                    m.pushFront(Integer.parseInt(inputStr[1]), deque);
                    break;
                case "push_back":
                    m.pushBack(Integer.parseInt(inputStr[1]), deque);
                    break;
                case "pop_front":
                    number = m.popFront(deque);
                    bw.write(String.valueOf(number) + "\n");
                    break;
                case "pop_back":
                    number = m.popBack(deque);
                    bw.write(String.valueOf(number) + "\n");
                    break;
                case "size":
                    number = m.dequeSize(deque);
                    bw.write(String.valueOf(number) + "\n");
                    break;
                case "empty":
                    number = m.empty(deque);
                    bw.write(String.valueOf(number) + "\n");
                    break;
                case "front":
                    number = m.viewFront(deque);
                    bw.write(String.valueOf(number) + "\n");
                    break;
                case "back":
                    number = m.viewBack(deque);
                    bw.write(String.valueOf(number) + "\n");
                    break;
            }
        }

        bw.flush();
        bw.close();
    }
}

 

 

 

 

 

 

 

 

 

 

μ •λ‹΅

 

 

 

 

 

 

λ°˜μ‘ν˜•