ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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);

     

    이미지 캡처본 .

     

Designed by Tistory.