문제 푼 날짜 : 2021-10-12
문제 링크 : https://www.acmicpc.net/problem/15954
완전탐색으로 풀 수 있는 문제였다.
주어진 인형들을 연속된 K개만큼 전부 뽑으면서, 뽑았을 때의 표준편차의 최솟값을 구해주면 된다.
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int N, K;
double ans = 987654321;
double arr[501];
void calculate(int first, int last) {
double sum = 0;
int total = last - first + 1;
for (int i = first; i <= last; i++) {
sum += arr[i];
}
double avg = (double) sum / total;
double vari = 0;
for (int i = first; i <= last; i++) {
vari += pow(arr[i] - avg, 2);
}
vari /= (double) total;
if (ans > sqrt(vari)) {
ans = sqrt(vari);
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
scanf("%d %d", &N, &K);
for (int i = 0; i < N; i++) {
scanf("%lf", &arr[i]);
}
for (int i = 0; i <= N - K; i++) {
for (int j = i + K - 1; j < N; j++) {
calculate(i, j);
}
}
cout.precision(11);
cout << ans;
return 0;
}
소수점 자릿수에 관한 문제인줄알고 그 부분만 계속 고치다가 범위마다 인형의 갯수가 달라지는걸 생각안하고 풀어서 처참하게 틀려버렸다...
급하면 디버깅이 정말 잘안되는 것 같다. 좀 더 차분하게 문제를 풀 수 있도록 연습하자.