공부하는 안경딸기

[Java] Java에서 Queue 사용하기 본문

프로그래밍언어/JAVA

[Java] Java에서 Queue 사용하기

안경딸기 2021. 9. 5. 23:15

코테 공부를 하다 보니 Java에는 Queue interface가 있다고 한다.

자료구조 C언어로 공부할 때 힘들게 배열 써가면서 Queue 구현했던거 생각하면... 천국...

 

FIFO 자료구조에서 사용되는 메소드

Queue interface에는 아래와 같이 FIFO 자료구조에서 사용되는 메소드를 정의하고 있다.

return method explain
boolean offer(E e) 주어진 객체를 넣음
E peek( ) 객체를 하나 가져옴. 객체를 큐에서 제거하지 않음.
E poll( ) 객체 하나를 가져옴. 객체를 규에서 제거함.

Queue를 구현한 LinkedList

Queue interface를 구현한 대표적 클래스는 LinkedList라고 한다.

(그치만 난 PriorityQueue를 먼저 사용해봤지!)

Queue<E> queue = new LinekdList<E>();
//LinkedList의 E 타입 파라미터 생략 시 왼쪽 Queue에 지정된 타입을 따라감
Queue<E> queue = new LinekdList<>();

PriorityQueue

PriotiryQueue는 Queue의 특징인 먼저 들어온 순서대로 데이터가 나가는 것이 아니라 우선순위를 결정하고 그 우선순위가 높은 자료가 먼저 나가는 자료구조다.

/**
 * 회의에 참석하려면 몇 개의 회의실이 필요한가?
 *
 * 회의 정렬 후 각 회의의 끝시간과 시작시간을 비교해서
 * 끝시간 > 시작시간 == 따로 회의실 사용해야 함
 * 끝시간 < 시작시간 == 같은 회의실 사용해도 됨
 */
public int solve(int[][] intervals){
	// 1. sort
    Arrays.sort(intervals, Comparator.comparingInt(a -> a[0])); //asc 오름차순
    Queue<int[]> queue = new PriorityQueue<>(Comparator.comparingInt(a -> a[1])); //end time 기준으로 오름차순

    // 2. for
    for(int[] arr : intervals){
        if(queue.isEmpty()){ //같이 사용할 수 없다면
            queue.offer(arr); //[0,30], [5,10]
        } else{ //같이 사용할 수 있다면
            if(queue.peek()[1] <= arr[0]){
                // 10 <= 16
                queue.poll(); //조금 더 앞에 시작하는 회의 값 빼고
            }
            //뒤에 시작하는 회의 값 넣음
            queue.offer(arr); //[16,20]
        }
    }

    return queue.size();
}

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[Java] BufferedReader/BufferedWriter 사용기  (0) 2021.08.19
Comments