https://www.acmicpc.net/problem/25947
문제 접근
그리디 문제!!
선물의 개수 최대 10만개 / 선물의 할인 개수가 최대 10만이니까
브루트 포스로 풀면 시간 초과가 발생한다.
구현은 간단하다.
우리는 가장 많은 선물을 살 수 있게 할인을 적용시키면 된다.
정답 코드
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int n = Integer.parseInt(input[0]); // 선물의 개수
int b = Integer.parseInt(input[1]); // 초기 예산
int a = Integer.parseInt(input[2]); // 할인 받을 수 있는 최대 선물 개수
int A = a;
StringTokenizer st = new StringTokenizer(br.readLine());
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(Integer.parseInt(st.nextToken()));
}
Collections.sort(list);
int cur = 0;
while (cur < n){
if(a > 0){
b -= (list.get(cur) / 2);
a--;
}
else{
if(A == 0){
b -= list.get(cur);
}
else{
b -= list.get(cur - A) / 2;
b -= (list.get(cur) / 2);
}
}
if(b < 0) break;
cur++;
}
System.out.println(cur);
}
}
'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
[Java] 백준 1676 팩토리얼 0의 개수 실버5 (0) | 2024.05.05 |
---|---|
[Java] [Math] 백준 11051 이항 계수 2 실버2 (0) | 2024.05.04 |
[Java] [Math] 백준 11050 이항 계수 브론즈1 (0) | 2024.05.04 |
[Java] [Math] 백준 6064 카잉 달력 실버1 (0) | 2024.05.04 |
[Java] [Math] 백준 11653 소인수 분해 브론즈1 (0) | 2024.05.04 |