[algo] 프린터

유현영·2020년 5월 10일
0

algo

목록 보기
8/8

1. 풀이

문제를 보자마자 우선 순위 큐로 구현해야겠다고 생각했다.
구글에 우선순위 큐를 검색해보고 가장 많이 나오는 것이 PriorityQueue 였다.
큐는 선입선출 (FIFO)로 먼저 들어온 자료가 먼저 나간다는 규칙을 가지고 있으며, 우선순위 큐는 우선순위대로 출력하는 특징을 가지고 있다.

import java.util.*;
class Solution {
    public int solution(int[] priorities, int location) {
                int answer = 1;

        PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>(Collections.reverseOrder());
        for(int j : priorities) priorityQueue.add(j);
        System.out.println(priorityQueue); // 높은 우선순위대로 정렬한거

//        poll() : 큐에서 우선순위가 가장 높은 요소를 빼냅니다. 즉 반환 후에 큐에서 삭제됩니다.
//        peek() : poll과 달리 큐에서 삭제하지 않고 가장 우선순위가 높은 요소를 얻습니다.

        while(!priorityQueue.isEmpty()){
            for(int i = 0; i < priorities.length; i++){
                if(priorities[i] == priorityQueue.peek()){
                    if(i == location){
                        return answer;
                    }
                    priorityQueue.poll();
                    answer++;
                }
            }
        }
        return answer;
    }
}

2. 공부해 볼 것

3. 다른사람 풀이

처음엔 arrayList로 풀 생각을 해서 다른 arrayList로 푼 사람의 예시를 참고해야겠다

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int solution(int[] priorities, int location) {
    List<Integer> list = new ArrayList<>();
    for (int priority : priorities) {
      list.add(priority);
    }

    int turn = 1;
    while (!list.isEmpty()) {
      final Integer j = list.get(0);
      //anyMatch : 최소한 한 개의 요소가 주어진 조건에 만족하는지 조사
      if (list.stream().anyMatch(v -> j < v)) {
        list.add(list.remove(0));
      } else {
        if (location == 0) {
          return turn;
        }
        list.remove(0);
        turn++;
      }

      if (location > 0) {
        location--;
      } else {
        location = list.size() - 1;
      }
    }

    throw new IllegalArgumentException(); 
    //메소드가 잘못되었거나 부적합한 인수를 전달했음을 나타내기 위해 던져집니다.
  }
}

Stream API는 최종 처리 단계 특정 조건을 만족하는 요소들을 얻을 수 있도록 세가지 매칭 메소드를 제공한다.

  • allMatch() 모든 요소들이 매개값(Predicate)으로 주어진 조건을 만족하는지 조사

  • anyMatch() 최소한 한 개의 요소가 주어진 조건에 만족하는지 조사

  • noneMatch() 모든 요소들이 주어진 조건을 만족하지 않는지 조사

profile
오늘보다 더 나은 내일

0개의 댓글