반응형
문제 설명
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이 (java)
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
// 필요한 변수 생성 (가장 높은 우선순위, 정렬된 우선순위, 우선순위 리스트)
Integer biggestNum = 0;
Queue<Integer> queue = new LinkedList<>();
ArrayList<Integer> sortedPriorities = new ArrayList();
for (int num: priorities) {
queue.add(num);
sortedPriorities.add(num);
}
sortedPriorities.sort(Collections.reverseOrder());
while(true){
// 큐에서 하나씩 빼거나, 빼서 맨 뒤로 보내거나
biggestNum = sortedPriorities.get(answer);
if (location == 0 && queue.peek() == biggestNum){
answer++;
break;
} else if (queue.peek() < biggestNum){
queue.add(queue.poll());
} else {
queue.poll();
answer++;
}
// 내가 선택한 작업의 위치 관리하기
if(location==0)
location = queue.size()-1;
else
location--;
}
return answer;
}
}
풀이 방법
- 큐를 이용해 원하는 로직을 구현하기
- 대기 목록 우선 순위대로 수행 (큐에서 하나씩 빼거나, 빼서 맨 뒤로 보내거나)
- 적절한 변수 생성 (location:선택한 작업 위치 관리, biggestNum:가장 높은 우선순위)
느낀점
로직 자체는 고민을 좀 하면 나올수 있으나
Array, List, Queue, int형이 섞였을때가 좀 헷갈리니 다시 정리
- Array 정렬 방법
- 단순 정렬시 - Array.sort(arr) - List 정렬 방법
- 단순 정렬시 - Collections.sort(list)
// 둘 다 같음
sortedPriorities.sort(Collections.reverseOrder());
Collections.sort(sortedPriorities, Collections.reverseOrder());
반응형
'개발 > 코딩 테스트' 카테고리의 다른 글
[알고리즘] 프로그래머스 > 힙 > 더 맵게 (0) | 2022.08.09 |
---|---|
[알고리즘] 프로그래머스 > 해시/큐 > 다리를 지나가는 트럭 (0) | 2022.08.08 |
[알고리즘] 프로그래머스 > 스택/큐 > 올바른 괄호 (0) | 2022.08.06 |
[알고리즘] 프로그래머스 > 해시 > 폰켓몬 (0) | 2022.08.06 |
[알고리즘] 프로그래머스 > 해시 > 위장 (0) | 2022.08.05 |