ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이중우선순위큐
    개발/코딩테스트 2024. 12. 26. 14:13

    문제

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

    조건 

    I 숫자 :  큐에 주어진 숫자를 삽입합니다.
    D 1 : 큐에서 최댓값을 삭제합니다.
    D -1 : 큐에서 최솟값을 삭제합니다.

     

    풀이 

    for을 돌린후 I 조건이면 List에 add D이면 List의 사이즈가 있울 경우  1 , -1에 의해 List를 정렬을 한 후 첫번째 로우를 제거 

    만약 최종 집계에 List의 사이즈가 없으면 0 ,0 출력  List의 사이즈가 있으면 정렬하여 첫번쨰 로우 , 마지막 로우를 출력 

     

    public static int[] solution(String[] operations) {
    	List<Integer> totalList = new ArrayList<>();
        
        for(int i=0; i< operations.length; i++){
        	String[] temp = operations[i].split(" ");
            String operation= temp[0];
            int number = Integer.parseInt(temp[1]);
            
            if("I".equals(operation){
            	totalList.add(number);
            }else if(totalList.size()>0){
            	if(-1 == number){ //최솟값 정렬 
                	totalList.sort((a,b) -> a-b);
                }else{ // 최댓값 정렬 
                    totalList.sort((a,b) -> b-a);
                }
                totalList.remove(0);
            }
        }
        int answer ={0,0};
        if(totalList.size()>0){
        	totalList.sort((a,b) -> a-b);
            answer[0] = totalList.get(0);
            answer[1] = totalList.get(totalList.size() -1);
        }
        return answer;
    }

     

    cf) 우선순위큐를 두개를 생성하여 거기서 peek 하는게 더 깔끔해보인다 

    public static int[] solution(String[] operations) {
    	Queue<Integer> number = PrioryQueue<>();
        Queue<Integer> reversNumber = PrioryQueue<>();
        
        for(int i=0;i<operations.length;i++){
        	String[] temp = operations.split(" ");
            int number = Integer.parseInt(temp[1]);
            
            swich(temp[0]){
            	case "I":
                	number.add(number);
                	reversNumber.add(number);                
                break;
                case "D":
                	if(-1 == number){
                    	int num = number.poll();
                        reversNumber.remove(num);
                    }else{
                    	int num = reversNumber.poll();
                        number.remove(num);                
                    }
                break;
            }
        }
        if(max.isEmpty()){
        	return new int[]{0,0};
        }
        return new int[]{number.peek() ,reversNumber.peek() };
    }

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

    프로그래머스 정수 삼각형  (0) 2025.01.05
    게임맵 최단거리  (1) 2024.12.29
    다리를 지나는 트럭  (0) 2024.12.22
    기능개발  (1) 2024.12.17
    프로그래머스 메뉴리뉴얼  (1) 2024.09.25

    댓글

Designed by Tistory.