자바 백준 15954번
실버 1
https://www.acmicpc.net/problem/15954
15954번: 인형들
첫 번째부터 세 번째까지의 인형을 선택하면 표준편차는 2/3의 양의 제곱근이 되고, 이 때 표준편차가 최소가 된다. 두 번째부터 네 번째까지의 인형을 선택하는 경우와, 세 번째부터 다섯 번째
www.acmicpc.net
문제 보기

분류: 수학, 브루트포스 알고리즘, 임의 정밀도, 큰 수 연산
코드 풀이
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 인형의 개수 N과 선택할 인형의 개수 K 입력 int N = sc.nextInt(); int K = sc.nextInt(); // 인형을 선호하는 사람의 수를 저장할 배열 생성 및 입력 int[] dolls = new int[N]; for (int i = 0; i < N; i++) { dolls[i] = sc.nextInt(); } // 최소 표준 편차를 구하는 메서드 호출 double minStdDev = findMinStdDev(dolls, K); // 결과 출력 System.out.printf("%.11f\n", minStdDev); } // 최소 표준 편차를 구하는 메서드 private static double findMinStdDev(int[] dolls, int K) { // 초기 최소 표준 편차를 Double 형의 최대값으로 설정 double minStdDev = Double.MAX_VALUE; // 연속된 K개의 위치에 대해 모든 가능한 경우를 확인 for (int i = K; i <= dolls.length; i++) { for (int j = 0; j <= dolls.length - i; j++) { // 현재 위치에서 K개의 인형을 선택하여 평균과 표준 편차를 계산 double m = mean(dolls, j, i); double ret = standardDeviation(dolls, m, j, i); // 최소 표준 편차 갱신 minStdDev = Math.min(minStdDev, ret); } } // 최소 표준 편차 반환 return minStdDev; } // 평균을 구하는 메서드 private static double mean(int[] arr, int start, int K) { double sum = 0.0; // 선택된 인형들의 선호하는 사람의 수를 합산 for (int i = 0; i < K; i++) { sum += arr[start + i]; } // 평균 반환 return sum / K; } // 표준 편차를 구하는 메서드 private static double standardDeviation(int[] arr, double m, int start, int K) { double sum = 0.0; // 각 인형의 선호하는 사람의 수와 평균의 차이의 제곱을 합산 for (int i = 0; i < K; i++) { sum += Math.pow(arr[start + i] - m, 2); } // 분산 계산 후 제곱근을 취하여 표준 편차 반환 return Math.sqrt(sum / K); } }
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 10655 - 마라톤 1 (0) | 2024.04.22 |
---|---|
[Java] 백준 풀기 15792 - A/B - 2 (0) | 2024.04.21 |
[Java] 백준 풀기 10826 - 피보나치 수 4 (2) | 2024.04.19 |
[Java] 백준 풀기 18221 - 교수님 저는 취업할래요 (2) | 2024.04.18 |
[Java] 백준 풀기 1064 - 평행사변형 (0) | 2024.04.16 |