본문 바로가기
Java/알고리즘

프로세스

by 티코딩 2023. 10. 18.

오늘도 큐를 쓰는게 훨씬 편할거같아서 한번 써봤다.


ㅇ 1트

public static int solution(int[] priorities, int location) {
        int answer = 0;

        //빈 큐를 하나 만들고 거기에 priorities 넣음
        Queue<Integer> q = new LinkedList();
        for(int i = 0; i < priorities.length; i++){
            q.add(priorities[i]);
        }
        Queue<Integer> resultQue = new LinkedList<>();
        //만약 큐의 첫번째값이 뒤에있는값보다 작을때 뽑아서 다시 뒤로 넣음
        //만약 첫번째값(current)이 뒤에있는거보다 크거나 같을때 resultQue 로 넣음
        while(!q.isEmpty()){
            int current = q.poll();

            boolean isBigger = true;

            for(int element : q){
                if(current < element){
                    isBigger = false;//current 가 작을때
                    break;
                }
            }
            if(isBigger) { //current 가 클때,
                resultQue.add(current); //resultQue 에 넣음.
            }
            else{
                q.add(current); //작을땐, q뒤에 넣음.
            }
        }
        
        while(!resultQue.isEmpty()){
            System.out.println(resultQue.poll());
        }
        return answer;
    }

사실 여기까지는 우선순위와 문제에 나온대로 큐로 정리를 하는 로직을 짰다. 그런데 location에 맞는 인덱스가 resultQue에 어디에있는지를 찾아야하는데 그게 참 애매했다. 같이 푼 영재님께서 

이런 팁을 주셔서 나도 저렇게 해봐야겠다 싶어서 방법을 찾아봤는데 큐에서는 저렇게 하기 힘들어서 새롭게 클래스를 하나 만들기로 마음먹었다. 그래서 Pair 클래스를 만들어서, 저렇게 index까지 같이 저장하는 방법을 선택했다.

ㅇ 2트

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<Pair> q = new LinkedList<>();
        for (int i = 0; i < priorities.length; i++) {
            q.add(new Pair(priorities[i],i));
        }

        int order = 0; // 처리 순서를 나타내는 변수

        while (!q.isEmpty()) {
            Pair currentPair = q.poll();
            int current = currentPair.value;
            int idx = currentPair.index;
            boolean isBigger = true;

            for (Pair elementPair : q) {
                if (current < elementPair.value) {
                    isBigger = false; // current 가 작을 때
                    break;
                }
            }

            if (isBigger) {
                order++; // 처리 순서 증가
                if (idx == location) {
                    return order; //여기서 정답이 리턴된다!!
                }
            } else {
                q.add(currentPair); // 작을 때, 큐 뒤에 다시 넣음
            }
        }

        return answer;
    }
    static class Pair {
        int value;
        int index;

        public Pair(int value, int index) {
            this.value = value;
            this.index = index;
        }
    }
}

 

'Java > 알고리즘' 카테고리의 다른 글

타겟넘버  (1) 2023.10.20
피로도  (1) 2023.10.19
기능개발  (0) 2023.10.17
괄호 회전하기  (0) 2023.10.16
H-Index  (0) 2023.10.13