팀 프로젝트
-> 매개변수를 줄이기 위해서는 객체와 클래스를 얼마나 잘 이해하고 사용하는지가 중요
-> 아래와 같이 해당하는 객체를 static으로 선언해두고 사용한다면 매개변수를 여러개 넘겨줄 필요 없음. (사용 방법과 때에 따라 다르니 주의 요망)
private static MenuContext menuContext;
public static void main(String[] args) {
menuContext = new MenuContext();
displayMainMenu();
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
ArrayList<Integer> arr = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr.add(Integer.parseInt(st.nextToken()));
}
double ans = Double.MAX_VALUE;
double res = 0;
for (int i = K; i <= N; i++) {
for (int j = 0; j <= N - i; j++) {
double m = min(arr, j, i);
res = answer(arr, m, j, i);
ans = Math.min(ans, res);
}
}
bw.write(String.format("%.11f", ans)+ "\n");
bw.flush();
bw.close();
br.close();
}
public static double min(ArrayList<Integer> arr, int start, int K) {
double avg = 0.0;
for (int i = 0; i < K; i++) {
avg += arr.get(start + i);
}
return avg / K;
}
public static double answer(ArrayList<Integer> arr, double m, int start, int K) {
double res = 0.0;
for (int i = 0; i < K; i++) {
res += Math.pow(arr.get(start + i) - m, 2);
}
return Math.sqrt(res / K);
}
}