우선순위 큐 6

[백준 1715] 카드 정렬하기- java (solved.ac - 골드 4)

https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 풀이 문제를 보았을 때 알 수 있는 힌트 문제를 보았을때 핵심으로 보아야할 것이 몇가지가 존재한다. 1. 정렬된 두 묶음의 숫자 카드가 존재함. 2. 두 묶음을 합치면 한 묶음이 되는데 두 묶음의 합이 된다. 3. 이렇게 여러개의 묶음을 합치면 합의 증가하게 된다. 4. 이때 최소한 몇 번의 비교가 필요한지 구하여라. 간단하게 접근하면 최소인 값 두개를 묶고 정렬을 하고 다시 최소인..

[프로그래머스] 이중우선순위큐 - python (레벨 3)

https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 문제 설명 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다. 명령어 수신 탑(높이) I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을 삭제합니다. 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요. 제한사항 operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다. operations의..

[백준 11286] 절대값 힙 - python (solved.ac - 실버 1)

https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 문제를 보았을때 알수있는 힌트 문제를 전체적으로 읽고 예제 입력, 출력을 보고 이해하고 풀 수 있었던 문제이다. 단순하게 푼다면 정렬을 하면서 풀수있겠지만, 그렇게 푼다면 정렬할때마다 시간이 소요되기에 시간초과가 나올것이다. 그렇기에 값을 넣거나 뺄때 바로 정렬이 되는 heap을 사용하면 해결할수 있는 문제이다. 여기서 약간 문제를 꼬았는데 바로 절대값을 넣어서 조금 어..

[프로그래머스] 디스크 컨트롤러- python (레벨 3)

https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 문제 설명 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를들어 - 0ms 시점에 3ms가 소요되는 A작업 요청 - 1ms 시점에 9ms가 소요되는 B작업 요청 - 2ms 시점에 6ms가 소요되는 C작업 요청 와 같은 요청이..

[프로그래머스] 더 맵게- python (레벨 2)

https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 풀이 문제를 보았을때 알수있는 힌트 단순하게 생각하면 정렬을 하고 최소 값 두개를 뽑아서 조건에 맞는 식을 다시 집어넣고 정렬하고 하면 문제는 풀수있다. # 단순하게 리스트로 풀었을 경우 def solution(scoville, K): answer =0 count=0 scoville.sort() while scoville[0]

[백준 11000] 강의실 배정- python (solved.ac - 골드 5)

https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 풀이 문제를 보았을때 알수있는 힌트 문제 자체는 참 간단하게 나와있는데 알고있어야 할 것들이 꽤 있어야 풀 수 있는 문제였다. 먼저 우선순위 큐를 알고있어야 풀수있는 문제이다. 문제를 보면 수업이 끝난 직후 이어서 다음 수업을 시작한다고하는데 이것이 우선적인 순서를 하고 이어서 계속 진행 되기에 우선 순위 큐를 이용해야한다. python에서는 heapq 라이브러리를 알고 있어야 빨리 해결할 수 있는 문제이다. heapq를 통해 데이터를 넣으면 ..

728x90