ํ•ด๋ฒ„๋‹ˆ 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();
    }
}

 

 

 

 

 

 

 

 

 

 

์ •๋‹ต

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•