public static int[] solution(String[] operations) {
int[] answer = {};
int max = 0;
int min = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> pq2 = new PriorityQueue<>();
for (int i = 0; i < operations.length; i++) {
List<String> list = Arrays.asList(operations[i].split(" "));
//System.out.println(list.get(0)+" "+list.get(1));
if (list.get(0).equals("I")) {
pq.add(Integer.valueOf(list.get(1)));
} else {
int cnt = 0;
if(pq.isEmpty()) continue;
Iterator<Integer> it = pq.iterator();
if (Integer.valueOf(list.get(1)) < 0) {
// 최소값 제거
while (!pq.isEmpty()) {
pq2.add(pq.poll());
}
pq2.poll();
while (!pq2.isEmpty()) {
pq.add(pq2.poll());
}
} else {
// 최대값 제거
pq.poll();
}
}
}
int cnt = 0;
while (!pq.isEmpty()) {
if(cnt == 0 ) {
max = pq.poll();
} else {
min = pq.poll();
}
cnt++;
}
answer = new int[]{max, min};
System.out.println(max+" "+min);
return answer;
}
Arrays.asList()
배열을 arrayList로 변환하여 리턴
String[] split(String regex)
입력받은 정규표현식 또는 특정문자를 기준으로 문자열을 나누어 배열로 리턴
아직 어디 내놓기 부끄러운 코드 ... 일단 들어온 값을 띄어쓰기 기준으로 잘라주어 원소 삽입인지 삭제인지 구분하고, 큐 두개를 만들어 poll로 최소/최대값 삭제할 수 있도록 했다
근데 다 짜고보니 저 while문 두개가 넘 보기싫고 성능적으로 안좋을 것 같아서 다른 사람들 풀이를 좀 봤는데 오름차순 큐 하나, 내림차순 큐 하나 만들어서 둘다 담아주고 poll 로 값 뺀 후 맨 마지막에 각각의 큐에 가장 첫번째값만 가져왔다
왜 그렇게 못풀었을까 난 !!!!!! 암튼 담번엔 쉽게 풀어야지