ALGORITHM/프로그래머스 | 백준 | 삼성 | 카카오

[SWEA] 6719. 성수의 프로그래밍 강좌 시청

SZCODE 2020. 5. 17. 23:39

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWd7sgDatsMDFAUh

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

문제 설명 : 

성수의 실력이 A라고 할 때, 수준이 M인 강좌를 시청하고 나면 성수의 실력은 (A+M)/2가 된다.
즉, 성수는 자신이 보는 강좌가 좋은 지 아닌지 판단하지 않고 그대로 강좌를 받아들이기 때문에, 실력보다 낮은 수준의 강좌를 보면 실력이 낮아질 수 있다.
현재 성수는 아직 아무런 실력이 없다. 즉 실력이 0이다.
성수는 볼 수 있는 강좌 총 N개 찾았고 시간 문제상 이 중에서 K개를 적절한 순서로 선택해 한 번씩 시청하려고 한다.
성수가 같은 강좌를 두 번 이상 보는 일은 없다고 할 때, 성수가 가질 수 있는 실력의 수치는 최대 몇인지 구하는 프로그램을 작성하라.
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Solution{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T, N, K;
		int[] M;
		T = sc.nextInt();
		for (int tc = 1; tc <= T; tc++) {
			N = sc.nextInt();
			K = sc.nextInt();
			
			M = new int[N];
			
			for (int i = 0; i < N; i++) {
				M[i] = sc.nextInt();
			}
			
			Arrays.sort(M);
			//System.out.println(Arrays.toString(M));
			double answer = 0;
			for (int i = N-K; i < N; i++) {
				answer = (answer + M[i])/2;
			}
			
			System.out.printf("#"+tc+" "+"%.6f", answer);
			System.out.println();
			
		}
	}
}