본문 바로가기

728x90

우선순위 큐

[C++]백준 1715번: 카드 정렬하기 문제 https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 문제이해 첫째 줄에 N이 주어집니다. 두 번째 줄부터 N개만큼의 카드 묶음을 입력합니다. 최소 비교 횟수를 출력합니다. 이 문제에서 주목해야 하는 부분은 바로 숫자 카드 묶음이 한 개만 남기 전까지 모든 카드를 묶는다는 것입니다. 카드 묶음과 카드 묶음을 묶어 새로운 카드 묶음을 만들고 이 새로운 카드 묶음은 다시 다른 카드묶음과 합쳐지게 됩니다. 간단하게 말하자면 카드 묶음이.. 더보기
[C++]백준 11286번: 절댓값 힙 문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제이해 첫째 줄에 연산의 개수(N)를 입력합니다. N개의 줄에 대해 연산의 정보(x)를 입력합니다. 입력에서 0이 입력된 수만큼 답을 출력합니다. 절댓값을 기준으로 정렬된 힙을 만들기 위해서는 당연히 절댓값을 기준으로 정렬한 우선순위 큐(priority_queue)를 사용하여야 합니다. 주의해야 할 점이 있다면 절댓값이 같고 부호가 다른 수에 대해서는 음수가 우선순위가.. 더보기
[C++]백준 2075번: N번째 큰 수 문제 https://www.acmicpc.net/problem/2075 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 문제이해 첫째 줄에 N(1 ≤ N ≤ 1,500)을 입력한다. 다음 줄부터 N x N의 표가 주어진다. 출력으로 N번째 큰 수를 출력한다. 표의 특징은 모든 열들이 오름차순으로 정렬된채로 입력된다는 것이다. 열을 기준으로는 이미 크기순으로 정렬이 되어있기 때문에 vector로 구현하면 가능할 것 같아서 2차원 vector로 구현하였다. 각각의 열을 기준으로 입력을 받고 열들의 마지막 행의 값이 제일.. 더보기
[C++]백준 1655번: 가운데를 말해요 문제 https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 문제이해 첫째 줄에 정수의 개수(N)을 입력합니다. 다음 줄부터 N개의 수를 입력합니다. N번의 케이스 동안의 중간값을 N개의 줄을 통해 출력합니다. 문제 자체의 내용은 매우 간단하지만 시간 제한이 0.1초이기 때문에 무엇인가 색다른 방법이 필요합니다. 처음엔 priority_queue 한개에 자료를 넣고 중간 값을 찾아가 이를 vector에 저장하고 나중에 출력하는 방법을 .. 더보기

LIST