Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 코테준비
- 백준 1000번 java
- 알고리즘
- 카카오1차
- 자료구조 트리
- 자바문자열
- 개발상식
- heap
- 코딩테스트기출
- 카카오코딩테스트
- 카카오코테
- 백준 1924번 java
- heap정렬
- 프로그래머스
- 카카오기출
- 공부정리
- 객체프로그래밍
- Java heap
- 힙정렬자바
- 백준
- java
- 백준 1924번
- 객체프로그래밍이란
- 프렌즈4블록
- 자료구조힙
- java method
- 자바
- 프렌즈4블록java
- 백준 1000번
- 문자열포맷
Archives
- Today
- Total
일단 시작해보는 블로그
[알고리즘_풀이] 백준 backjoon 1202번, 보석 도둑 본문
처음에 그냥 리스트에 넣고 정렬을 해줘서인지,,,,,, 시간초과가 났었던 문제.
정렬 시, 아주 빠른 속도를 보이는 우선순위큐를 이용해야했다.
시간복잡도 : O(logN)
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 보석 개수
int K = sc.nextInt(); // 1개의 보석만을 담을 수 있는 가방
Node[] jewelry = new Node[N]; // 보석의 정보를 담고 있는 Node 배열
int[] max = new int[K];
// 보석관련 정보를 N만큼 입력받는다.
for(int i=0; i<N; i++){
int n1 = sc.nextInt();
int n2 = sc.nextInt();
jewelry[i] = new Node(n1, n2);
}
// 담을 수 있는 최대 무게
for(int i=0; i<K; i++){
max[i] = sc.nextInt();
}
// 이부분이 '그리디'스러운 방법이라고 생각한다.
// 전부 오름차순 정렬
Arrays.sort(max);
// 무게순으로 오름차순 정렬
Arrays.sort(jewelry);
PriorityQueue<Integer> jewelryList = new PriorityQueue<>();
long sum = 0;
int j=0;
// 가방에 담기위해서 가방의 개수만큼 돌린다.
for(int i=0; i<K; i++){
// 가방에 담을 수 있는 보석을 우선순위큐에 담는다.
// 우선순위 큐 : 최대힙을 통해 구현된 자료구조.시간복잡도 : O(logN)으로, 일반 array나 List를 정렬하는 것보다 빠르다(성능이 좋다).
// 기본값은 오름차순이지만, 내림차순이 필요한 경우 -를 붙여서 저장한 후, 꺼내쓸 때 절댓값을 출력하는 Math.abs(int n)이용
while(j < N && jewelry[j].M <= max[i]) { //앞에서 담은것은 제외해야 하므로 while문과 j를 사용
jewelryList.offer(-jewelry[j].V);
j++;
}
// 제일 비싼 것이 가장 위에 있으므로, 그것만 뺴고 다음 max[i]로 넘어간다.
if(!jewelryList.isEmpty()){
sum += Math.abs(jewelryList.poll());
}
}
System.out.println(sum);
}
static class Node implements Comparable<Node>{
int M; // 무게
int V; // 가격
public Node(int M, int V){
this.M = M;
this.V = V;
}
@Override
public int compareTo(Node o) {
return this.M - o.M;
}
}
}
'CS > 알고리즘 풀이' 카테고리의 다른 글
[알고리즘_풀이] DP문제, 백준 9465번 스티커 (0) | 2019.09.16 |
---|---|
[알고리즘_풀이] 백준 14501번, 퇴사. DP (0) | 2019.09.16 |
[알고리즘_풀이] 백준 1107, 리모컨 (0) | 2019.09.06 |
[알고리즘_풀이] 카카오 코딩테스트, 실패율 Java (0) | 2019.08.30 |
[알고리즘_풀이] 카카오코딩테스트, 셔틀버스 (java) (1) | 2019.08.28 |
Comments