[백준] 15954번 인형들 (= dolls) - 재우스 프로그래밍 (C 언어)
2021. 1. 30. 08:26ㆍ백준
문제 링크 : www.acmicpc.net/problem/15954
#include <stdio.h>
#include <math.h>
#define DEBUG 0
#define MAX_DOLL_COUNT 500
//input 값 저장
int arrInput[MAX_DOLL_COUNT];
//input에서 choiceBruteForce로 선택된 인형들 배열
int arrChoice[MAX_DOLL_COUNT];
//arrChoice 배열의 index
int arrChoiceIdx;
//N : 인형 개수, K : 최소 선택 인형 개수
int N, K;
//표준 편차의 최솟값
double result;
//input에서 표준편차를 계산할 인형 선택하는 함수
void choiceBruteForce(int);
//현재 arrChoice 에 들어있는 인형들의 표준편차를 계산하는 함수
void calcDeviation(void);
int main(void)
{
//input 받기
scanf("%d %d", &N, &K);
for (int i = 0; i < N; i++) {
scanf("%d", &arrInput[i]);
}
result = -1;
//표준 편차를 계산할 인형들 선택하기
for (int i = 0; i < N; i++) {
choiceBruteForce(i);
}
printf("%.7lf\n", result);
return 0;
}
void choiceBruteForce(int dollIdx)
{
//arrChoice 배열 길이가 최소 선택 인형 개수보다 크거나 같을 때
if (arrChoiceIdx >= K) {
calcDeviation();
}
//dollIdx 위치의 인형 개수를 arrChoice에 추가
arrChoice[arrChoiceIdx++] = arrInput[dollIdx];
//연속된 위치에 있는 인형을 선택하므로 바로 다음 인형을 선택하거나 안하거나 둘 중 하나임.
if (dollIdx < N) {
choiceBruteForce(dollIdx + 1);
}
//backtracking을 위해 위에서 추가한 arrChoice 값 뺀다.
arrChoice[--arrChoiceIdx] = 0;
return;
}
void calcDeviation(void)
{
int sum = 0;
double avg = 0, varianceSum = 0, variance = 0, deviation = 0;
//arrChoice의 합산 구함.
for (int i = 0; i < arrChoiceIdx; i++) {
sum += arrChoice[i];
}
//arrChoice의 평균 구함.
avg = (double)sum / arrChoiceIdx;
//분산 합 구함.
for (int i = 0; i < arrChoiceIdx; i++) {
varianceSum += pow(arrChoice[i] - avg, 2.0);
}
//분산 구함.
variance = varianceSum / arrChoiceIdx;
//표준 편차 구함.
deviation = sqrt(variance);
#if DEBUG
/*
printf("arrChoice : ");
for (int i = 0; i < arrChoiceIdx; i++) {
printf("%d\t", arrChoice[i]);
}
*/
printf("\nsum: %d, avg: %lf, variance: %lf, deviation: %lf\tresult: %lf", sum, avg, variance, deviation, result);
#endif
//표준 편차 최솟값 갱신
if (result == -1) {
result = deviation;
}
if (result > deviation) {
result = deviation;
}
return;
}
'백준' 카테고리의 다른 글
[백준] 4949번 균형잡힌 세상 (= balanced world) - 재우스 프로그래밍 (C 언어) (0) | 2021.01.30 |
---|---|
[백준] 12865번 평범한 배낭 (= plain backpack) - 재우스 프로그래밍 (C 언어) (0) | 2021.01.30 |
[백준] 1967번 트리의 지름 (= tree diameter) - 재우스 프로그래밍 (C 언어) (0) | 2021.01.29 |
[백준] 1062번 가르침 (= teaching) - 재우스 프로그래밍 (C 언어) (0) | 2021.01.29 |
[백준] 14226번 이모티콘 (= emoticon) - 재우스 프로그래밍 (C 언어) (0) | 2021.01.29 |