T_era

[JAVA] 백준 2164 : 카드2 (LinkedList 구현) 본문

Programing/BaekJoon

[JAVA] 백준 2164 : 카드2 (LinkedList 구현)

블스뜸 2025. 3. 30. 18:45

배열을 사용하지않고 LinkedList를 구현해서 Queue를 작동해봤다
잘된다^^

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        NodeManager nodeManager = new NodeManager();

        int num = Integer.parseInt(br.readLine());
        for (int i = 1; i <= num; i++) { // num까지 push해야합니다.
            nodeManager.push(i);
        }
        while (nodeManager.getSize() > 1) {
            nodeManager.pop();
            nodeManager.push(nodeManager.select().getValue());
            nodeManager.pop();
        }
        bw.write(String.valueOf(nodeManager.select().getValue()));

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

class QueueNode {
    int value;
    QueueNode node;

    public QueueNode(int value) {
        this.value = value;
        node = null;
    }

    public int getValue() {
        return value;
    }

    public QueueNode getNextNode() {
        return node;
    }

    public void setNextNode(QueueNode node) {
        this.node = node;
    }
}

class NodeManager {
    QueueNode head, tail;
    int size;

    public NodeManager() {
        head = tail = null;
        size = 0;
    }

    public boolean isEmpty() {
        return head == null && tail == null;
    }

    public void push(int value) {
        QueueNode queueNode = new QueueNode(value);
        if (isEmpty()) {
            head = tail = queueNode;
        } else {
            head.setNextNode(queueNode);
            head = queueNode;
        }
        size++;
    }

    public QueueNode pop() {
        if (isEmpty()) {
            System.out.println("Queue is Empty");
            return null;
        } else {
            QueueNode popNode = tail;
            tail = tail.getNextNode();
            size--;
            return popNode;
        }
    }

    public QueueNode select() {
        if (isEmpty()) {
            System.out.println("Queue is Empty");
            return null;
        } else {
            return tail;
        }
    }

    public int getSize() {
        return size;
    }
}