[알고리즘/자바] 프로그래머스 - 프린터
2020. 7. 20. 08:07ㆍ개발/알고리즘
https://programmers.co.kr/learn/courses/30/lessons/42587
내가 원하는 출력물이 몇번만에 출력되는지 계산하는 문제다. 그냥 꺼내면 좋겠지만 각 출력물은 우선순위가 부여되어있다.
먼저 prior에 우선순위 정보를 넣고, loc에 위치 정보를 넣었다.
prior의 0번째 출력물을 하나 꺼내고 prior에 남아 있는 값들 중에 내가 꺼낸 출력물 보다 우선순위가 높은게 없다면 출력하면 된다. 만약 있다면 제일 후 순위로 다시 넣는다.
loc는 출력물의 최초 위치를 기억하기 위해 사용했다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
List<Integer> prior = new ArrayList<Integer>();
List<Integer> loc = new ArrayList<Integer>();
// 위치정보 할당.
for(int i =0; i<priorities.length; i++) {
prior.add(priorities[i]);
loc.add(i);
}
int count = 0;
while(true) {
int l = loc.get(0);
int p = prior.get(0);
loc.remove(0);
prior.remove(0);
if(prior.size()==0) {
answer += count +1;
break;
}
// 꺼낸값보다 우선순위가 높은게 있다면 다시 큐안으로..
if( Collections.max(prior) > p ) {
prior.add(p);
loc.add(l);
}
// 꺼낸값보다 우선순위가 높은게 큐에 없다면 출력
else {
count += 1;
if( location == l) {
answer = count;
break;
}
}
}
return answer;
}
}
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘/파이썬] 백준 11053번 - 가장 긴 증가하는 부분 수열 (0) | 2020.07.27 |
---|---|
[알고리즘/자바] 프로그래머스 - 베스트 앨범 (0) | 2020.07.21 |
[알고리즘/자바] 프로그래머스 - 이상한 문자 만들기 (0) | 2020.07.19 |
[알고리즘/파이썬] 백준 11047번 - 동전0 (0) | 2020.07.16 |
[알고리즘/파이썬] 백준 1157 - 단어공부 (0) | 2020.07.15 |