sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오블완
  • DB
  • 티스토리챌린지
  • JPA
  • 프로그래머스
  • 고득점 Kit
  • nginx
  • docker
  • 고득점KIT
  • spring boot
  • mariadb
  • java
  • 연습문제
  • kotlin
  • 알고리즘
  • 안드로이드 스튜디오
  • Android Studio
  • 백준
  • 레벨2
  • 레벨3

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Programmers :: 고득점 kit :: 이중우선순위큐
Algorithm/Programmers

Programmers :: 고득점 kit :: 이중우선순위큐

2022. 9. 21. 14:10
728x90

풀이

class 이중우선순위큐 {
    /**
     * 설명
     * - 정렬 된다면 가장 큰 값과 가장 작은 값을 인덱스로 찾아 낼 수 있다.
     * - 따라서 정렬을 시킨 뒤에 해당 원소를 삭제 시킴으로써 해결할 수 있다.
     * */
    fun solution(operations: Array<String>): IntArray {
        val sortedList = mutableListOf<Int>()

        operations.forEach { operation ->

            if(operation.contains("I")){
                sortedList.add(operation.split(" ")[1].toInt())
                sortedList.sort()
            }
            else{
                if(sortedList.isNotEmpty()){
                    if(operation == "D 1"){
                        sortedList.removeAt(sortedList.size - 1)
                    }
                    else{
                        sortedList.removeAt(0)
                    }
                }
            }
        }

        if(sortedList.isEmpty()){
            println(intArrayOf(0,0).toList())
            return intArrayOf(0,0)
        }
        else{
            println(intArrayOf(sortedList[sortedList.size - 1], sortedList[0]).toList())
            return intArrayOf(sortedList[sortedList.size - 1], sortedList[0])
        }

    }

    /**
     * 설명
     * - priorityQueue 를 사용하여 최댓값(hi)과 최솟값(lo)을 저장하는 변수를 따로 두었다.
     * - 최댓값을 삭제할 경우 hi 에서 poll() 하여 제일 큰 값을 배제하고
     * - 최솟값을 삭제할 경우 lo 에서 poll() 하여 제일 작은 값을 배제하였다.
     * - 그런데 이렇게 하면 특수한 경우에 문제가 풀리지 않게 된다.
     *
     * 예외 테스트 케이스
     * - 파라미터 : ["I 10", "I 20", "D 1", "I 30", "I 40", "D -1", "D -1"], 정답 : [40,40] -> 틀린 정답 [40, 30]
     *
     * 예외 발생 이유
     * - 애초부터 모든 값을 확인하며 처리하는 로직이 아니기에 구멍이 있을거라고 생각하였다.
     * - 그 구멍은 위의 경우처럼 n번 값을 넣은뒤 n-1번 값을 빼면 발생한다.
     * - 예외의 경우 hi : [40,30,10], lo : [30,40] 을 가지게 된다.
     * - 따라서 틀린 정답을 도출하게 됨으로 틀린 방법이다.
     * */
//    fun solution(operations: Array<String>): IntArray {
//        var modCnt = 0
//
//        val priorityQueueLowest = PriorityQueue<Int>()
//        val priorityQueueHighest = PriorityQueue<Int>(Collections.reverseOrder())
//
//        operations.forEach { operation ->
//
//            if(operation.contains("I")){
//                priorityQueueLowest.add(operation.split(" ")[1].toInt())
//                priorityQueueHighest.add(operation.split(" ")[1].toInt())
//            }
//            else if(operation == "D 1"){
//                modCnt++
//                priorityQueueHighest.poll()
//            }
//            else{
//                modCnt++
//                priorityQueueLowest.poll()
//            }
//        }
//
//        if(priorityQueueHighest.size + priorityQueueLowest.size <= modCnt){
//            println(intArrayOf(0,0).toList())
//            return intArrayOf(0,0)
//        }
//        else{
//            println(intArrayOf(priorityQueueHighest.peek(), priorityQueueLowest.peek()).toList())
//            return intArrayOf(priorityQueueHighest.peek(), priorityQueueLowest.peek())
//        }
//
//    }
}

출처

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이

 

GitHub - sggnology/programmers-algorithm: 프로그래머스 알고리즘 코드 정리입니다.

프로그래머스 알고리즘 코드 정리입니다. Contribute to sggnology/programmers-algorithm development by creating an account on GitHub.

github.com

 

728x90

'Algorithm > Programmers' 카테고리의 다른 글

Programmers :: 고득점 kit :: DFS/BFS :: 단어변환  (2) 2022.10.30
Programmers :: 연습문제 :: 롤케이크 자르기  (0) 2022.10.24
Programmers :: 연습문제 :: 최솟값  (0) 2022.09.17
Programmers :: 2022 tech internship :: 두 큐 합 같게 만들기  (0) 2022.08.30
Programmers :: 2021 카카오 채용연계형 인턴십 :: 거리두기 확인하기  (0) 2022.08.16
    'Algorithm/Programmers' 카테고리의 다른 글
    • Programmers :: 고득점 kit :: DFS/BFS :: 단어변환
    • Programmers :: 연습문제 :: 롤케이크 자르기
    • Programmers :: 연습문제 :: 최솟값
    • Programmers :: 2022 tech internship :: 두 큐 합 같게 만들기
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바