관리 메뉴

어읽로꾸거

BOJ 15954 인형들 본문

알고리즘

BOJ 15954 인형들

어읽로꾸거 2019. 3. 19. 20:23

백준 15954 : https://www.acmicpc.net/problem/15954


해결과정:

 문제를 풀때 실수나 놓치는 부분이 많은 문제였음

1. K이상

2. 초기 지정해주는 min값을 매우 크게해주지 않으면 안됨

3. 범위(one by off 문제)

4. double말고 long double 


이것만 해결하면 대부분은 맞을 것 같다.

1번 조건을 대충 읽어서 시간을 날리고... 2번도 놓쳐서 또날리고... 3번은 그동안 많이 겪은 문제라서 확실하게 확인함


for문을 돌리는것 말고도 

분산 = 제곱의평균 - 평균의제곱

으로 구할 수도 있다. 고등학교때 제평평제라고 외웠음 ∂


코드:

#include<iostream>
#include<math.h>
using namespace std;
int main() {
	//freopen("input.txt", "r", stdin);
	int n, k, doll[505];
	long double min= 999999999999999999; // 적당히 아주 큰 수
	cin >> n >> k;
	for (int i = 0; i < n; i++) cin >> doll[i];
	int i = 0;
	for (int i = 0; i <= n - k; i++) { //i 시작값
		for (int j = i + k - 1; j < n; j++) { //j 끝값 oboe 조심
			long double mean = 0;
			for (int l = i; l <= j; l++) mean += doll[l];
			mean /= (long double)(j - i + 1);
			long double sd = 0;
			for (int l = i; l <= j; l++) sd += (doll[l] - mean)*(doll[l] - mean);
			sd /= (long double)(j - i + 1);
			min = min > sd ? sd : min;
		}
	}
	cout.precision(11);
	cout << sqrt(min);
}


'알고리즘' 카테고리의 다른 글

BOJ 16469 소년 점프  (0) 2019.03.28
BOJ 16953 A → B  (0) 2019.03.27
BOJ 1932 정수 삼각형  (0) 2019.03.26
BOJ 1620 나는야 포켓몬 마스터 이다솜  (0) 2019.03.24
BOJ 2580 2239 스도쿠  (0) 2019.03.23