-
DS : 이중 큐 (프로그래머스 자바 컴파일 환경 v14 )CodeingTestPrac/Java Coding Test 2023. 7. 7. 17:54
https://school.programmers.co.kr/learn/courses/30/lessons/42628
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1차 코딩
@Test void sol4(){ String [] given = {"I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"}; solution(given); } public int[] solution(String[] operations) { Deque<Integer> d = new LinkedList<>(); for(String operation : operations){ String[] cmd = operation.split(" "); int cmdNumber = Integer.parseInt(cmd[1]) ; if( cmd[0].equals("I")) { d.add(cmdNumber); List<Integer> sortedList = d.stream() .sorted() .collect(Collectors.toList()); d.clear(); sortedList.forEach(d::add); } else if (cmd[0].equals("D")) { if(d.isEmpty()) continue; if(cmdNumber == 1){ //delete big d.pollLast(); }else { // delete smallest d.pollFirst(); } } } int[] ans = new int[2]; if(d.isEmpty()){ ans[0] = 0; ans[1] = 0; return ans; } if(d.size() == 1){ ans[0] = d.poll(); ans[1] = ans[0]; return ans; } ans[0] = d.pollLast(); ans[1] = d.pollFirst(); return ans; }
2 차 코딩 : PriorityQueue 로 heap Class 이용
public class MaxMinHeap { private PriorityQueue<Integer> leftHeap; private PriorityQueue<Integer> rightHeap; public MaxMinHeap(){ leftHeap = new PriorityQueue<>(10, Collections.reverseOrder());//최대값; rightHeap = new PriorityQueue<>();//최소값 } public void push(int v){ leftHeap.add(v); } public void removeMax(){ while(!rightHeap.isEmpty()){ leftHeap.add(rightHeap.poll()); } leftHeap.poll(); } public void removeMin(){ while(!leftHeap.isEmpty()){ rightHeap.add(leftHeap.poll()); } rightHeap.poll(); } public int getMaxValue(){ if(leftHeap.size() == 0 && rightHeap.size() == 0) return 0; while(!rightHeap.isEmpty()){ leftHeap.add(rightHeap.poll()); } return leftHeap.peek(); } public int getMinValue(){ if(leftHeap.size() == 0 && rightHeap.size() == 0) return 0; while(!leftHeap.isEmpty()){ rightHeap.add(leftHeap.poll()); } return rightHeap.peek(); } }
public int[] solution(String[] operations) { MaxMinHeap maxMinHeap = new MaxMinHeap(); for(int i = 0; i < operations.length; i++){ String[] commend = operations[i].split(" "); int v = Integer.parseInt(commend[1]); if(commend[0].equals("I")){ maxMinHeap.push(v); }else{ switch (v){ case 1 : maxMinHeap.removeMax(); break; case -1: maxMinHeap.removeMin(); break; } } } int[] aw = new int[]{maxMinHeap.getMaxValue(),maxMinHeap.getMinValue()}; return aw; }
3차 코딩 :
TreeMap 을 이용한 풀이 -> 중복된 숫자를 받을 수 있기 때문에 , key 값으로 입력되는 값을, value 값에 입력되는 값의 개수를 넣어둔다.
기본 사용법 :
@Test void treemap(){ TreeMap<Integer,String> map = new TreeMap<Integer,String>(){{//초기값 설정 put(1, "사과");//값 추가 put(2, "복숭아"); put(3, "수박"); }}; System.out.println(map); //전체 출력 : {1=사과, 2=복숭아, 3=수박} System.out.println(map.get(1));//key값 1의 value얻기 : 사과 System.out.println(map.firstEntry());//최소 Entry 출력 : 1=사과 System.out.println(map.firstKey());//최소 Key 출력 : 1 System.out.println(map.lastEntry());//최대 Entry 출력: 3=수박 System.out.println(map.lastKey());//최대 Key 출력 : 3 }
public int[] solution(String[] operations) { TreeMap<Integer,Integer> map = new TreeMap<>(); for(int i = 0; i < operations.length; i++){ String[] commend = operations[i].split(" "); int v = Integer.parseInt(commend[1]); if(commend[0].equals("I")){ map.put(v,map.getOrDefault(v,0)+1); }else{ if(map.size() == 0) continue; switch (v) { case 1 -> { // delete big int checkMax = map.lastKey(); if(map.get(checkMax) > 1){ map.put(checkMax,map.get(checkMax)-1); }else{ map.remove(checkMax); } } case -1 ->{ int checkMin = map.firstKey(); if(map.get(checkMin) > 1){ map.put(checkMin,map.get(checkMin)-1); } else{ map.remove(checkMin); } } } } } if(map.size()==0) return new int[]{0,0}; return new int[]{map.lastKey(),map.firstKey()}; }
-------
위의 문제를 풀다 자바 16 문법인 .sorted().toList() 가 불가 한 걸 발견했다.
2023 년 7월 7일 현 , 자바 14 를 지원한다.
enhanced switch 는 사용이 가능하다.
프로그래 머스 우측 상단의 자바 버전 정보를 확인하거나 다음과 같은 코드로 컴파일 환경을 확인 가능하다.
String javaVersion = System.getProperty("java.version"); System.out.println("Java Version: " + javaVersion);
이미지 캡처본 . 'CodeingTestPrac > Java Coding Test' 카테고리의 다른 글
프로그래머스 야근지수 자바 [14일차](효율성 문제) (0) 2023.07.09 코테 연습[자바 코테 준비 13일차] stream 연습 (0) 2023.07.08 코테 연습[자바 코테 준비 12일차] stream 연습 (0) 2023.07.07 DS : "()" 문제 ArrayList 말고 Deque (스택 과 큐) ,PriorityQ (0) 2023.07.05 코테 연습[자바 코테 준비 11일차] HashMap 값 기준 정렬 (0) 2023.07.05