본문 바로가기

코딩테스트/programmers

프로세스

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

queue에서 꺼낸 프로세스가 queue에 남아있는 프로세스들의 우선순위들보다 높은지 판별하려면 시간 복잡도가 커지므로,

 

프로세스들의 우선순위들을 내림차순 정렬하고,

 

queue에서 꺼낸 프로세스의 우선순위가 정렬된 우선순위의 첫번째 값과 같은지 비교해서

 

같다면 실행, 다르다면 다시 queue에 넣어준다.

 

프로세스를 실행했다면 정렬된 우선순위의 첫번째 값을 제거해줘야 하는데, 배열이므로 원소의 삭제보단 index값을 이용했다.

 

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(Process.of(i, priorities[i]));
        }
        
        Arrays.sort(priorities);
        int index = priorities.length - 1;
        
        int cnt = 0;
        while(!processes.isEmpty()) {
            
            Process process = processes.poll();
            
            if (priorities[index] == process.priority) {
                index--;
                cnt++;
                if (process.location == location) return cnt;
            } else {
                processes.add(process);
            }
            
        }
        
        return cnt;
    }
        
    static class Process {
        int location;
        int priority;
        static Process of(int location, int priority) {
            Process vo = new Process();
            vo.location = location;
            vo.priority = priority;
            return vo;
        }
    }
}

 

'코딩테스트 > programmers' 카테고리의 다른 글

피보나치 수  (0) 2023.09.16
다음 큰 숫자  (0) 2023.09.16
리코쳇 로봇  (0) 2023.09.13
하노이의 탑  (0) 2023.09.12
숫자의 표현  (0) 2023.09.11