Algorithm/SW Expert Academy
[SWEA] 6719 성수의 프로그래밍 강좌 시청
SSONGMI
2021. 3. 2. 23:35
반응형
문제 출처: SW Expert Academy
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
: 프로그래밍 강좌의 전체 개수와 들을 수 있는 개수가 주어진다.
: 각각의 강좌 수준이 주어지고, 강좌를 들으면 해당 강좌의 수준과 현재 실력과의 평균값이 현재 실력이된다.
: 또한 프로그래밍 강좌를 듣는 순서는 강제되어 있지 않다.
: 처음에는 모든 조합을 고려하도록 코드를 작성했다.
→ 이 경우 시간 초과가 난다.
: 다시 생각해 본 결과 강좌를 듣는 순서가 자유이기 때문에 강좌의 수준을 오름차순으로 정렬하고
: 들을 수 있는 강좌의 수 만큼 뒤에서부터 오름차순으로 접근하는 그리디적인 방법을 생각하게 되었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Solution {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
static int N, K;
static int[] arr, selected;
public static void main(String[] args) throws NumberFormatException, IOException {
// 테스트 케이스 수를 입력받고
int T = Integer.parseInt(br.readLine());
// 테스트 케이스 수만큼 반복하며
for (int tc = 1; tc <= T; tc++) {
st = new StringTokenizer(br.readLine());
// N과 K를 입력받아
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
// N사이즈의 전체 배열과
arr = new int[N];
// K사이즈의 선택된 배열을 만들어
selected = new int[K];
// 전체 배열을 입력받고
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++)
arr[i] = Integer.parseInt(st.nextToken());
// 정렬시켜서 큰 수부터 K를 작은 순서대로 더해가며 평균을 구해줌
double max = 0;
Arrays.sort(arr);
for(int i = K; i > 0; i--) {
max = (max+arr[N-i])/2;
}
sb.append(String.format("#%d %f\n", tc, max));
}
System.out.println(sb);
}
}
반응형