알고리즘 문제 풀이 / 프로그래머스 (programmers) - 프린터
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42587
이번 문제를 풀고나서 다른 사람들의 풀이를 살펴보는데 내가 짠 코드보다 한 단계 더 간편하게 풀 수 있어 그 풀이를 조금 응용해보았다.
문제 풀이
처음 시도
동일한 중요도 일 때, location의 위치를 구별해야하므로 check 이라는 변수를 두고 갱신되는 location의 위치를 찾아냈다.
public static int solution(int[] priorities, int location) {
int answer = 1;
int check = 0;
Queue<Integer> q = new LinkedList<>();
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for(int i = 0; i < priorities.length; i++) {
q.add(priorities[i]);
pq.add(priorities[i]);
}
while(q.size() > 0) {
if(q.peek() != pq.peek()) {
q.add(q.poll());
if(check == location)
location += q.size();
check++;
}else {
if(location == check) break;
q.remove();
pq.remove();
check++;
answer++;
}
}
return answer;
}
두번째 시도
location변수를 감소하는 방법
peek()으로 가져온 값이 location의 위치가 아닐 땐 location--하는 방법으로 풀었는데
이렇게 하면 따로 변수를 만들지 않아도 풀 수 있었다.
public static int solution(int[] priorities, int location) {
int answer = 1;
Queue<Integer> q = new LinkedList<>();
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for(int i = 0; i < priorities.length; i++) {
q.add(priorities[i]);
pq.add(priorities[i]);
}
while(q.size() > 0) {
if(q.peek() != pq.peek()) {
q.add(q.poll());
location = location > 0 ? location-1 : q.size()-1;
}else {
if(location == 0) break;
q.remove();
pq.remove();
location--;
answer++;
}
}
return answer;
}
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스(programmers)] (Lv2) 전화번호 목록 (0) | 2021.05.20 |
---|---|
[프로그래머스(programmers)] (Lv1) K번째 수 (0) | 2021.05.19 |
[프로그래머스(programmers)] (Lv1) 완주하지 못한 선수 (0) | 2021.05.19 |
[프로그래머스(programmers)] (Lv2) 다리를 지나는 트럭 (1) | 2021.05.18 |
[프로그래머스(programmers)] Summer/Winter Coding(~2018) 배달 (2) | 2021.05.16 |
댓글