๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 6986๋ฒˆ: ์ ˆ์‚ฌํ‰๊ท 

by ์ฃผ๋ฐœ2 2020. 2. 14.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/6986

 

6986๋ฒˆ: ์ ˆ์‚ฌํ‰๊ท 

์ฒซ์งธ ์ค„์— ์ ˆ์‚ฌํ‰๊ท (N, K)๋ฅผ, ๋‘˜์งธ ์ค„์— ๋ณด์ •ํ‰๊ท (N, K)๋ฅผ ๊ฐ๊ฐ ์†Œ์ˆ˜์ ์ดํ•˜ ์…‹์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ๋‘˜์งธ ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒฐ๊ณผ๊ฐ’์ด 9.667์ธ ๊ฒฝ์šฐ 9.67๋กœ, 5์ธ ๊ฒฝ์šฐ 5.00์œผ๋กœ, 5.5์ธ ๊ฒฝ์šฐ์—๋Š” 5.50์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

์ฝ”๋“œ

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static double []dArr;
	public static int N;
	public static int K;
	
	// ์ ˆ์‚ฌ ํ‰๊ท 
	public static String julsa(int num) {
		double avg = 0;
		double sum = 0;
		String result = "";
		for(int i=num; i<dArr.length-num; i++) 		// ์•ž, ๋’ค num๊ฐœ์”ฉ ์ œ์™ธ
			sum += dArr[i];
		avg = sum / (dArr.length-(num*2));		// ์•ž ๋’ค num๊ฐœ์”ฉ ์ œ์™ธํ•œ ํ‰๊ท 
		result = String.format("%.2f", avg);
		return result;	
	}
	
	// ๋ณด์ • ํ‰๊ท 
	public static String bojung(int num) {
		double avg = 0;
		double sum = 0;
		String result = "";
		// ์•ž์—์„œ num๊ฐœ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์œผ๋กœ ๊ต์ฒดํ•˜๊ธฐ.
		// ex) num=2 -> ์•ž์—์„œ 2๊ฐœ๋ฅผ 3๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ๊ต์ฒด
		for(int i=0; i<num; i++) 
			dArr[i] = dArr[num];
		
		// ๋’ค์—์„œ num๊ฐœ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์œผ๋กœ ๊ต์ฒดํ•˜๊ธฐ
		// ex) num=2 -> ๋’ค์—์„œ 2๊ฐœ๋ฅผ ๋’ค์—์„œ 3๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ๊ต์ฒด
		for(int i=dArr.length-1; i>=dArr.length-num; i--) 
			dArr[i] = dArr[dArr.length-num-1];
		
		for(int i=0; i<dArr.length; i++) 
			sum += dArr[i];
		
		avg = sum / dArr.length;	// ํ‰๊ท 
		result = String.format("%.2f", avg);
		return result;
	}

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		N = scan.nextInt();	// ์ ์ˆ˜์˜ ๊ฐœ์ˆ˜
		K = scan.nextInt();	// ์ œ์™ธ๋˜๋Š” ์ ์ˆ˜๊ฐœ์ˆ˜
		dArr = new double[N];
		
		for(int i=0; i<N; i++) {
			dArr[i] = scan.nextDouble();
		}
		
		Arrays.sort(dArr);	// ์ •๋ ฌ
		
		String jul = julsa(K);	// ์ ˆ์‚ฌ ํ‰๊ท 
		String bo = bojung(K);	// ๋ณด์ • ํ‰๊ท 
		System.out.println(jul);
		System.out.println(bo);
		
		scan.close();
	}

}

ํ’€์ด

๋ฌธ์ œ์— ๋งž๊ฒŒ ์ ˆ์‚ฌํ‰๊ท ๊ณผ ๋ณด์ •ํ‰๊ท ์„ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ ˆ์‚ฌํ‰๊ท  - ์•ž, ๋’ค K๋ช… ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ•™์ƒ์˜ ํ‰๊ท ์ด๋‹ค.

N = 7, K = 2์ผ๋•Œ...

0 1 2 3 4 5 6

์œ„์—์„œ 2, 3, 4 3๋ช…์˜ ํ‰๊ท ๋งŒ ํ•„์š”ํ•˜๋ฏ€๋กœ

for๋ฌธ์—์„œ i=K๋ถ€ํ„ฐ, i<N-K ๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ ํ‰๊ท ์„ ๊ตฌํ•œ๋‹ค.

 

๋ณด์ •ํ‰๊ท  - ์•ž, ๋’ค์—์„œ ๊ฐ๊ฐ K๋ช…๋งŒํผ ๊ฐ€์žฅ ์ธ์ ‘ํ•œ ์ ์ˆ˜๋กœ ๊ต์ฒดํ•œ๋‹ค.

N = 7, K = 2 ์ผ๋•Œ...

0 1 2 3 4 5 6

0 1 ํ•™์ƒ์€ ํ•™์ƒ 2์˜ ์„ฑ์ ์œผ๋กœ ๊ต์ฒดํ•˜๊ณ ,

5 6 ํ•™์ƒ์€ ํ•™์ƒ 4์˜ ์„ฑ์ ์œผ๋กœ ๊ต์ฒดํ•˜๋ฉด ๋œ๋‹ค.

 

 

* ๋ฌธ์ œ์—์„œ ์ถœ๋ ฅํ˜•์‹์— ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.

result = sum / dArr.length;	// ํ‰๊ท 
result = Math.round(result*100)/100.0;	// ์†Œ์ˆ˜ ์…‹์งธ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ
return result;

์ฒ˜์Œ์—” ์œ„์™€ ๊ฐ™์ด Math.round() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅํ–ˆ์ง€๋งŒ ํ‹€๋ ธ๋‹ค๊ณ  ๋‚˜์™”๋‹ค.

N์ด 100,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์—ฌ์„œ ์˜ค์ฐจ?ํŽธ์ฐจ ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด์„œ String.format() ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜๋‹ˆ AC !

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€