페이지

1337번: 올바른 배열

https://www.acmicpc.net/problem/1337


#include<stdio.h>
#include<algorithm>
int data[10010], N, count, MIN;
int main()
{
    int i, j, k;
    scanf("%d", &N);
    for (i = 1; i <= N; i++)
    {
        scanf("%d", &data[i]);
    }
    std::sort(1 + data, 1 + N + data);
    MIN = 5;
    if (N>5)
    {
        for (i = 0; i <= N - 5; i++)
        {
            for (j = 1; j <= 5; j++)
            {
                count = 0;
                for (k = j - 1; k >= 1; k--)
                {
                    if (data[i + k] >= data[i + j] - j + 1)
                    {
                        count++;
                    }
                    else
                    {
                        break;
                    }
                }
                for (k = j; k <= 5; k++)
                {
                    if (data[i + k] <= data[i + j] + 5 - j)
                    {
                        count++;
                    }
                    else
                    {
                        break;
                    }
                }
                if (5 - count<MIN)
                {
                    MIN = 5 - count;
                }
            }
        }
    }
    else
    {
        for (j = 1; j <= N; j++)
        {
            count = 0;
            for (k = j - 1; k >= 1; k--)
            {
                if (data[k] >= data[j] - j + 1)
                {
                    count++;
                }
                else
                {
                    break;
                }
            }
            for (k = j; k <= N; k++)
            {
                if (data[k] <= data[j] + 5 - j)
                {
                    count++;
                }
                else
                {
                    break;
                }
            }
            if (5 - count<MIN)
            {
                MIN = 5 - count;
            }
        }
    }
    printf("%d", MIN);
    return 0;
}

댓글 없음 :

댓글 쓰기