-
문제
이중 우선순위 큐가 할 연산 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