1. 1 ~ N 까지에서 가장 Ki가 높은것들을 차례대로 될때까지 뺀다.
import java.util.*; | |
import java.io.*; | |
/** | |
* https://www.acmicpc.net/problem/15708 | |
* BOJ 백준온라인져지 15708 미네크래프트 풀이 | |
*/ | |
public class Main { | |
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); | |
public static void main(String args[]) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
String str1[] = br.readLine().split(" "); | |
int N = Integer.parseInt(str1[0]); | |
long T = Long.parseLong(str1[1]); | |
long P = Long.parseLong(str1[2]); | |
String str2[] = br.readLine().split(" "); | |
int sum = 0; | |
PriorityQueue<Integer> pq = new PriorityQueue<>(); | |
int max = 0; | |
for (int i = 0; i < N; i++) { | |
int K = Integer.parseInt(str2[i]); | |
sum += K; | |
pq.offer(-K); | |
while (sum > T - i * P) { | |
if (pq.size() == 0) break; | |
sum += pq.poll(); | |
} | |
max = Math.max(max, pq.size()); | |
} | |
bw.write(String.valueOf(max)); | |
bw.flush(); | |
} | |
} |
문제
미네크래프트에 있는 디디는 집을 짓기 위해 돌을 채취하려고 한다. N개의 바위들이 일렬로 놓여져 있고, 디디는 현재 첫번째 바위에 위치해 있다. 각 바위 i는 서로 같거나 다른 강도를 가지고 있어서, 바위에서 돌을 채취하기 위해 해야 하는 곡괭이질의 수 Ki 또한 서로 같거나 다르다. 디디는 돌을 채취하기 위해 다음과 같은 행동을 할 수 있다.
- 시간 1을 소비하여, 디디 앞에 있는 바위에 곡괭이질을 1번 한다.
- 시간 P를 소비하여, 이웃한 바위로 이동한다.
디디에게 T만큼의 시간이 주어졌을 때, 채취할 수 있는 돌의 최대 개수를 출력하는 프로그램을 작성하라.
입력
첫째 줄에 정수 N(1 ≤ N ≤ 105), T(1 ≤ T ≤ 109), P(1 ≤ P ≤ 105)가 공백으로 구분되어 주어진다.
둘째 줄에 바위 i(i = 1, 2, ..., N)를 채취하기 위해 필요한 곡괭이질의 수 Ki(1 ≤ Ki ≤ 105)가 공백으로 구분되어 주어진다.
출력
문제의 정답을 출력하라.
예제 입력 1
6 17 1 3 5 2 6 9 1
예제 출력 1
4
힌트
'IT > 알고리즘' 카테고리의 다른 글
BOJ 백준온라인져지 2858 기숙사 바닥 풀이 (0) | 2018.05.11 |
---|---|
BOJ 백준온라인져지 9827 아즈텍 피라미드 풀이 (0) | 2018.05.10 |
BOJ 백준온라인져지 15680 연세대학교 풀이 (0) | 2018.05.08 |
BOJ 백준온라인져지 2909 캔디 구매 풀이 (0) | 2018.05.07 |
BOJ 백준온라인져지 10709 기상캐스터 풀이 (0) | 2018.05.04 |