안녕하세요 호호만두에요
이번에는 자바로 알고리즘 문제 풀때 편하게 사용할 수 있는
자료구조 큐(queue)에 대해서 알아볼게요!!
우선 자바에서 큐를 사용하려면 다음과 같이 import를 하면 됩니다
import java.util.Queue;
import java.util.LinkedList;
큐는 LinkedList를 이용해서 하더라구요
그래서 Queue와 LinkedList를 모두 import 해줘야 해요
이번에는 Queue 변수를 만들어 봅시다
Queue<Integer> queue = new LinkedList<>(); // queue 선언, linkedlist 이용
위와 같이 선언해주면 되요. 저는 Integer 타입의 값을 담는 queue를 선언했어요
물론 다른 타입으로도 선언가능합니다
그러면 이제 queue에 값을 넣어볼까요??
스택에 값을 넣을때는 push이지만 queue에 값을 넣을때는 offer()를 이용해요
queue.offer(1); // queue에 1 넣기
queue.offer(2); // queue에 2 넣기
queue는 FIFO(First In First Out)이죠?? 이렇게 1과 2 값을 넣을 수 있어요
왼쪽이 앞 쪽이라고 한다면 queue에 다음과 같이 들어가있다고 볼 수 있어요
그러면 queue에서 값을 어떻게 꺼낼까요??
poll() 명령어를 통해 값을 꺼낼 수 있어요
위와 같이 값을 넣었다면 1이 num 변수에 담길거에요
int num = queue.poll(); // queue의 맨 앞에 값 꺼내기
위에서 poll로 값을 꺼내고 나면 queue는 위 처럼 되어있을거에요
stack에서 처럼 queue에서도 값을 빼지 않고 확인하려면
peek() 메소드를 이용하면 됩니다!!
이러면 top_num에 2라는 값이 담기게 되겠죠??
int top_num = queue.peek(); // 값을 꺼내지 않고 queue의 맨 앞의 값 확인하기
이렇게 peek()를 통해 값을 가져와도 2라는 값은 그대로 queue에 있어요
*** queue 사용시 불편한 점
queue는 큐의 특성에 맞게 FIFO를 이용할 경우 아주 편하다
하지만 반대로 그렇지 않은 경우 불편하다
queue에는 인덱스를 통해 값을 가져오는 메소드가 없다(제가 확인한 바로는??)
그래서 인덱스를 통해 값을 확인할 필요가 있다면 ArrayList(어레이 리스트)를 이용하세요~~!!