본문 바로가기
Blog/TIL

[240906] 우선 순위 큐 (PriorityQueue)

by 코젼 2024. 9. 6.
728x90
반응형

🔶 우선 순위 큐


목차

    / 오늘의 TIL /

    • 메모
      • 범위가 벗어나서 인덱스 접근이 어렵다면 새로운 +n 배열을 만들어서 접근해볼 것

    https://school.programmers.co.kr/learn/courses/30/lessons/42587

    - 우선 순위 큐에서 Collections.reverseOrder() 를 통해 내림차순으로 정렬할 수 있다.

    import java.util.*;
    
    class Solution {
        public int solution(int[] priorities, int location) {
            
            //우선 순위 큐
            PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
            
            //초기 값
            for (int p : priorities) {
                queue.add(p);
            }
            
            //큐가 빌 때까지 진행
            int answer = 0;
            while (!queue.isEmpty()) {
                for (int i = 0; i < priorities.length; i++) {
                    //동일한 값인 경우만 제거 가능
                    if (queue.peek() == priorities[i]) {
                        queue.poll();
                        answer++; //실행 횟수 추가
                        
                        //target 번호와 동일할 경우 종료
                        if (location == i) return answer;
                    }
                }
            }
            return answer;
        }
    }

     

    https://school.programmers.co.kr/learn/courses/30/lessons/17682

    - 결론이 모든 수의 합이라면, 하나씩 접근해서 하나하나 확인하려고 하지 말자...

    - 나무보다 숲을 볼 것!!

    import java.util.*;
    import java.util.stream.*;
    
    class Solution {
        public int solution(String dartResult) {
            
            int result = 0; //총 점수
            int lastScore = 0; //직전 점수
            int curScore = 0; //현재 점수
            
            for (int i = 0; i < dartResult.length(); i++) {
                
                char c = dartResult.charAt(i);
                
                //10점인 경우
                if (c == '1' && dartResult.charAt(i+1) == '0') {
                    result += lastScore; //결과 값에 추가
                    lastScore = curScore; //직전 점수 수정
                    curScore = 10; //현재 점수는 10점
                    i++; //0 건너뛰기
                    continue;
                }
                
                //한 자리 숫자인 경우
                if ('0' <= c && c <= '9') {
                    result += lastScore; //결과 값에 추가
                    lastScore = curScore; //직전 점수 수정
                    curScore = c - '0'; //현재 점수 수정
                }
                
                //'S', 'D', 'T' 보너스인 경우
                else if ('A' <= c && c <= 'Z') {
                    if (c == 'D') curScore = (int) Math.pow(curScore, 2);
                    else if (c == 'T') curScore = (int) Math.pow(curScore, 3);
                }
                
                //'#', '*' 옵션인 경우
                else if (c == '#') curScore *= (-1);
                else if (c == '*') {
                    lastScore *= 2;
                    curScore *= 2;
                }
            }
            //마지막 모든 수 더하기
            result += (lastScore + curScore);
            return result;
        }
    }
    728x90
    반응형

    'Blog > TIL' 카테고리의 다른 글

    [240907] 이진법  (0) 2024.09.07
    [240905] 코딩 테스트 풀이  (0) 2024.09.05
    [240626] JS 문법  (0) 2024.06.26
    [240621] 동시성 테스트, BT  (0) 2024.06.21
    [240620] ArgumentMatchers  (0) 2024.06.20

    댓글