공부하는 안경딸기
[Java] Java에서 Queue 사용하기 본문
코테 공부를 하다 보니 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