• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

Queue 의 구현체를 LinkedList 로 사용하시는 이유가 따로 있나요?

20.03.27 17:59 작성 조회수 81

1

안녕하세요. 선생님

강의에서 큐 관련 문제를 풀때마다 의문이 드는게 있었습니다.

Queue 의 구현체가 여럿 있는 걸로 알고 있습니다.

PriorityQueue 는 꺼내는 순서를 정하고 싶을때 사용하는 것 같은데 LinkedList 는 어떤 용도로 사용하나요?

답변 1

답변을 작성해보세요.

1

안녕하세요.~~^^

질문주셔서 감사합니다

질문주신 

"PriorityQueue 는 꺼내는 순서를 정하고 싶을때 사용하는 것 같은데 LinkedList 는 어떤 용도로 사용하나요?"

Queue가 갖고 있는 함수는 딱 기억나는게 offer(), peek() , poll() 이렇게 기억나죠..사실 이것만 알면 되죠 

1. PriorityQueue  대표적인 문제는 KClosest(좌표0,0에서 제일 가까운 좌표찾기 문제)를 보시면됩니다.

Queue<int[]> queue = new PriorityQueue<>(points.length, Comp); 이렇게 queue를 만든 후

queue에 offer()는 넣기만하죠  들어온 값을 내부적으로 우선순위를 만들잖아요

poll()을 이용해서 빼낼때 , 내부적으로 구현을 해놓은 그걸 우리는 갖다가 쓰면되죠, 

Binary Search Tree 형태로  maxHeap 또는 minHeap을 만들죠 시간복잡도는(n log n)

2. LinkedList 이용 대표적인 문제는 LevelOrder(TreeNode를 이용해서 레벨을 한칸씩 아래로 이동하여 각레벨의 val구하는문제)보시면됩니다.

Queue<TreeNode> queue = new LinkedList<>() 에서

여기서도 offer()는 넣기만하죠 큐에다가 

문제는 poll() 호출할때는 그냥 넣은 순서대로 빼는거죠(FIFO) ..ㅎㅎ단순 자체..좀더 설명하면 이름처럼 Linked(연결된)이니까 순서대로 빼내면 끝입니다.

PriorityQueue의 poll()과 다르죠(1번에서 설명한거처럼 내부적으로 우선순위를 계산해서 다음나올애가 결정)

LinkedList 의 poll()은 다음 next에 해당하는 녀석을 보내주면 끝입니다.

좀더 부연 설명하면, 비트코인 즉 블록체인이죠 그게 바로 LinkedList 형태입니다.

그냥 블록체인은 LinkedList로 구현됐다고 보시면됩니다.

누가 LinkedList 뭐냐고 하면, 그게 블록체인 자료구조이고, 그게 비트코인 생성원리다.하면됩니다.

키가 1-2-3으로 이루어진 블록(메모장)이 있다고 하면, 1의 다음블록은 누구죠? 2죠

절대 1의 다음블록이 3이 될순 없죠, 1의 next는 무조건 2이어야만 합니다.

그게 블록체인의 핵심이죠 그리고 그게 다입니다.

그리고 LinkedList관련 문제는 reversLinkedList 문제 보시면 됩니다.

거기보면 next()만 나옵니다. 왜냐면 next가 젤 중요한 개념이라서..다음 값이 누구냐만 찾습니다.

혹시 더 궁금하시면, 댓글 써주세요~~

감사합니다~