반응형
프로그래머스 - [Level 2] 프로세스
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
- 프로세스가 대기 큐에 들어가 있다.
- 이들에게는 우선순위도 주어진다.
- 프로세스 대기큐 순서대로 우선순위가 담긴 배열이 주어졌을 때, 원하는 순번의 프로세스가 몇번째로 실행되는지 리턴해라.
해결 키 포인트
- 스택/큐 사용
- 큐에 우선순위와 인덱스가 주어진 class Process를 담는다
- Process 의 인자로는 순서인 index와 중요도가 있다.
- 주어진 우선순위 배열을 정렬한다.
- 내림차순 정렬을 하고자 했지만 방법을 몰라 오름차순으로 정렬
Arrays.sort(int [], Collections.reverseOrder()) 은 배열이 int [] 라 불가능했다.
- int [] 는 primitive type | 이를 쓰기 위해서는 배열이 Generic Class(Integer [])이여야 한다.
- 내림차순 정렬을 하고자 했지만 방법을 몰라 오름차순으로 정렬
- 정렬된 우선순위 배열에서 len-count번째 수와 현재 꺼내진 수와 동일한지 판단
- count 는 1로 초기화
- 다를 경우, 현재 뽑은 수는 뒤로 다시 넣고, 앞에 수 다시 빼고 반복
- 이를 반복하면서 count 증가
- 현재 뽑은 Process의 index가 순서를 원하는 프로세스일 경우 count 리턴
코드
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
Queue<Process> processes = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
processes.add(new Process(i, priorities[i]));
}
Arrays.sort(priorities);
int len = priorities.length;
int count = 1;
while (!processes.isEmpty()) {
Process p = processes.poll();
while(p.priority != priorities[len-count]) {
processes.add(p);
p = processes.poll();
}
if(p.index == location)
break;
count++;
}
return count;
}
public static class Process {
int index;
int priority;
public Process(int index, int priority) {
this.index = index;
this.priority = priority;
}
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 2002] 추월(JAVA) (0) | 2024.02.11 |
---|---|
[백준 9465] 스티커(JAVA) (0) | 2024.02.11 |
[프로그래머스] 기능개발 (JAVA) (1) | 2024.01.28 |
[프로그래머스] 의상 (JAVA) (0) | 2024.01.20 |
[백준 1991] 트리 순회(JAVA) (0) | 2024.01.16 |