알고리즘/BOJ

백준 14922번 부분평균

꾸준함. 2018. 7. 13. 16:15

문제 링크입니다: https://www.acmicpc.net/problem/14922


힌트가 핵심인 문제였습니다.

구간이 1인 경우는 자기자신 뿐이므로 평균을 구할 수 없습니다.

구간이 2인 경우에는 P+1 == Q 이므로 힌트가 성립하지 않습니다.

구간이 3인 경우에는 P+2 == K+1 == Q이므로 힌트가 성립하지 않습니다.

구간이 4 이상인 경우에는 힌트가 성립하므로 평균이 더 작은 구간으로 나눌 수 있기 때문에 답은 구간이 2와 3 중에 있습니다.

따라서, 구간이 2 또는 3인 구간에서 평균이 제일 작은 구간의 P를 출력해주면 되는 문제였습니다.

주의할 점은, 구간이 3인 부분부터 구한 뒤에 구간이 2인 부분을 구해줘야한다는 점입니다!


#include <iostream>

using namespace std;

 

const int MAX = 1000000;

 

int N;

double A[MAX];

 

int startIdx(void)

{

        //구간의 길이 1: 성립 X

        //구간의 길이 2: P + 1 == Q 이므로 힌트 성립 X

        //구간의 길이 3: P + 2 == K + 1 == Q 이므로 힌트 성립 X

        //이후부터는 힌트 성립하므로 구간의 길이가 2 or 3이여야지만 성립

        double minAverage = (A[0] + A[1]) / 2;

        int idx = 0;

 

        //구간의 길이 3

        for (int i = 2; i < N; i++)

        {

                 double temp = (A[i - 2] + A[i - 1] + A[i]) / 3;

                 if (temp < minAverage)

                 {

                         minAverage = temp;

                         idx = i - 2;

                 }

        }

        //구간의 길이가 2

        for (int i = 1; i < N; i++)

        {

                 double temp = (A[i - 1] + A[i]) / 2;

                 if (temp < minAverage)

                 {

                         minAverage = temp;

                         idx = i - 1;

                 }

        }

        return idx;

}

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0); //cin 속도 향상 위해

        cin >> N;

 

        for (int i = 0; i < N; i++)

                 cin >> A[i];

 

        //배열의 길이 2: A(0~1)

        if (N == 2)

                 cout << 0 << endl;

        else

                 cout << startIdx() << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

백준 14924번 폰 노이만과 파리  (0) 2018.07.13
백준 14923번 미로 탈출  (0) 2018.07.13
백준 14919번 분포표 만들기  (1) 2018.07.11
백준 9328번 열쇠  (5) 2018.07.11
백준 10814번 나이순 정렬  (2) 2018.07.11