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 | 29 | 30 | 31 |
Tags
- 후위표기
- jquery 필터선택자
- 재귀함수
- java Collections.sort()
- 자바 순열 코드
- parseInt()
- 자바 재귀 조합
- jquery dom 계층 선택자
- 알고리즘
- jquery 속성선택자
- str to char array
- 자바 조합 재귀
- java 내부 클래스
- 순열 재귀
- java lambda
- 순열코드
- 자바
- Java
- 알고리즘 그래프
- 재귀
- 조합 재귀
- inner class
- Interface
- 자바입출력
- char to str
- jquery 이벤트 처리
- 자바스크립트 이벤트처리
- 서로소
- 상속
- 자바스크립트 이벤트중지
Archives
- Today
- Total
유블로그
[프로그래머스] 디스크컨트롤러 본문
프로그래머스 level3 디스크컨트롤러
이상한 코드
import java.util.PriorityQueue;
class Solution {
static class Job implements Comparable<Job> {
int request, totalTime;
public Job(int request, int totalTime) {
this.request = request;
this.totalTime = totalTime;
}
@Override
public int compareTo(Job o) {
return this.totalTime-o.totalTime;
}
}
static int N;
static int[][] JOBS;
public int solution(int[][] jobs) {
N = jobs.length;
PriorityQueue<Job> q = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
q.offer(new Job(jobs[i][0], jobs[i][1]));
}
int total = 0;
int second = 0;
Job j;
while(!q.isEmpty()) {
j = q.poll();
total += second + j.totalTime - j.request;
second += j.totalTime;
}
return total/N;
}
}
-> 이렇게 하면 작업을 하다가 중간에 막 다른 작업도 하게 되고
비는시간도 생각 안 하고
어쨌든 말도 안되는 코드...^^
priorityQueue에 다 넣고 while 안에서 어떻게 처리하는 지 알 수가 없어서
그래서 다른 코드 참고해서 풀었다...
해답은 pq에 애초부터 한 번에 다 안 넣는 것이었다!!!
second를 조절하여 작업이 시작될 수 있다면 pq에 넣는다!
pq 조건은 내가 처음에 설정한 적은 작업시간 기준이 맞았다.
그리고 total 계산도 맞는 거였다~~
너무 어려웠다..
정답 코드
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
class Solution {
static class Job implements Comparable<Job> {
int request, totalTime;
public Job(int request, int totalTime) {
this.request = request;
this.totalTime = totalTime;
}
@Override
public int compareTo(Job o) {
return this.totalTime-o.totalTime;
}
}
public int solution(int[][] jobs) {
int N = jobs.length;
PriorityQueue<Job> q = new PriorityQueue<>();
Arrays.sort(jobs, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0];
}
});
int total = 0,second = 0,idx = 0;
Job j;
while(true) {
if(idx == N && q.isEmpty()) break;
while(idx < N && jobs[idx][0] <= second) {
q.offer(new Job(jobs[idx][0],jobs[idx][1]));
idx++;
}
if(q.isEmpty()) {
second = jobs[idx][0];
}
else {
j = q.poll();
total += second + j.totalTime - j.request;
second += j.totalTime;
}
}
return total / N;
}
}
소요시간 1시간 35분
'알고리즘' 카테고리의 다른 글
[프로그래머스] 모의고사 (0) | 2021.01.03 |
---|---|
[프로그래머스] 이중우선순위큐 (0) | 2021.01.03 |
[프로그래머스] K번째수 (0) | 2020.12.26 |
[프로그래머스] 프린터 (0) | 2020.12.23 |
[프로그래머스] 불량사용자 (0) | 2020.12.22 |