darklight

sublimevimemacs

Java

문제 설명

이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.

Untitled

이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.

제한사항

입출력 예

Untitled

입출력 예 설명

16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.7,5,-5를 삽입 후 최솟값을 삭제합니다. 최대값 7, 최소값 5를 반환합니다.

import java.util.*;

class Solution {
    
    public int[] solution(String[] operations) {
        int[] answer = new int[2];

        ArrayList <Integer> list = new ArrayList<>();
        Queue <String> queue = new LinkedList<>();
        
        for(String str : operations){
            queue.offer(str);
        }
        
        while(!queue.isEmpty()){
            String command = queue.poll();
            String head = command.substring(0, 1);
            int number = Integer.parseInt(command.substring(2));
            
            if(head.equals("I")){
                list.add(number);
            }else{
                if(list.size() > 0){
                    if(number < 0){
                        list = removeMin(list);
                    }else{
                        list = removeMax(list);
                    }
                }
            }
        }
        
        if(list.size() == 0){
            answer[0] = 0;
            answer[1] = 0;
        }else{
            answer[0] = getMax(list);
            answer[1] = getMin(list);
        }
        
        return answer;
    }
    
    private int getMax(ArrayList <Integer> arr){
        int max = -2147483648;
        for(int i : arr){
            if(i > max){
                max = i;
            }
        }
        
        return max;
    }
    
    private int getMin(ArrayList <Integer> arr){
        int min = 2147483647;
        for(int i : arr){
            if(i < min){
                min = i;
            }
        }
        
        return min;
    }
    
    private ArrayList <Integer> removeMax(ArrayList <Integer> arr){
        int idx = 0;
        int max = -2147483648;
        for(int i = 0; i < arr.size(); i++){
            if(arr.get(i) > max){
                max = arr.get(i);
                idx = i;
            }
        }
        arr.remove(idx);
        
        return arr;
    }
    
    private ArrayList <Integer> removeMin(ArrayList <Integer> arr){
        int idx = 0;
        int min = 2147483647;
        for(int i = 0; i < arr.size(); i++){
            if(arr.get(i) < min){
                min = arr.get(i);
                idx = i;
            }
        }
        arr.remove(idx);
        
        return arr;
    }
}

풀이

  1. 변수 설정

    1. 매개 변수 길이와 동일한 반환 배열 설정
    2. Integer Type의 ArrayList 생성
    3. String Type의 Queue 생성
    4. 생성된 Queue에 매개 변수 요소 추가
    int[] answer = new int[2];
    
    ArrayList <Integer> list = new ArrayList<>();
    Queue <String> queue = new LinkedList<>();
    
    for(String str : operations){
    		queue.offer(str);
    }
    
  2. ArrayList 내 Max값과 Min값을 제거하여 반환하는 메소드 생성

        private ArrayList <Integer> removeMax(ArrayList <Integer> arr){
            int idx = 0;
            int max = -2147483648;
            for(int i = 0; i < arr.size(); i++){
                if(arr.get(i) > max){
                    max = arr.get(i);
                    idx = i;
                }
            }
            arr.remove(idx);
            
            return arr;
        }
        
        private ArrayList <Integer> removeMin(ArrayList <Integer> arr){
            int idx = 0;
            int min = 2147483647;
            for(int i = 0; i < arr.size(); i++){
                if(arr.get(i) < min){
                    min = arr.get(i);
                    idx = i;
                }
            }
            arr.remove(idx);
            
            return arr;
        }