[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต 1๊ถŒ :: Quantization[์–‘์žํ™”] (์ฝ”๋“œ, ์•Œ๊ณ ๋ฆฌ์ฆ˜)

Quantization

https://www.algospot.com/judge/problem/read/QUANTIZE

๋‚˜์˜ ๋‹ต

์•Œ๊ณ ๋ฆฌ์ฆ˜
  1. ์ˆ˜์—ด์„ ์ •๋ ฌํ•œ๋‹ค.
  2. ๋ถ€๋ถ„ ์ˆ˜์—ด๋“ค์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋Œ๋ฉด์„œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์˜ค์ฐจํ•ฉ์ด ๊ฐ€์žฅ ์ ์€ ์ˆ˜์—ด์„ ๊ตฌํ•œ๋‹ค.

2๋ฒˆ ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์ตœ์ ๋ถ€๋ถ„๊ตฌ์กฐ์ž„์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ฐ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์˜ค์ฐจํ•ฉ์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์—ฌ์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ณธ์ธ์€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๋ชจ๋‘ ์™„์„ฑํ–ˆ์„ ๋•Œ ์ง„ํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ํ•˜์—ฌ ์–ด์จŒ๋“  ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๋งŒ๋“œ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜์˜ ๋์— ๋„๋‹ฌํ•ด์•ผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ์ด ์ ์ด ์‹œ๊ฐ„์ดˆ๊ณผ์˜ ์›์ธ์ด ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

์ฝ”๋“œ

์ฝ”๋“œ1

#include <iostream>
#include <algorithm>

using namespace std;

int N, S;
int arr[100];
int* num_idx; // index 0์€ -1, 1 ~ S๊นŒ์ง€ ์žˆ์Œ
int min_res = 1e9;
int memorize[101][101];

void Quantization(int n) { // ๋‚˜๋ˆˆ ํšŸ์ˆ˜
    if (n == S - 1) {
        int start = 0; int end;
        int res = 0;
        for (int i = 1; i < S; i++) {
            end = num_idx[i];
            if (memorize[start][end] != -1) {
                res += memorize[start][end];
                start = end + 1;
                continue;
            }

            int mid = 0;
            for (int j = start; j <= end; j++) {
                mid += arr[j];
            }

            mid /= (end - start + 1);
            int mid_arr[3] = { mid - 1,mid,mid + 1 };
            int tmp;
            int min_mid = 1e9;
            for (int j = 0; j < 3; j++) {
                tmp = 0;
                for (int k = start; k <= end; k++) {
                    tmp += (int)pow(mid_arr[j] - arr[k], 2);
                }
                min_mid = min(tmp, min_mid);
            }
            res += min_mid;
            memorize[start][end] = min_mid;
            start = end + 1;
        }

        end = N - 1;
        if (memorize[start][end] != -1) {
            res += memorize[start][end];
        }
        else {
            int mid = 0;
            for (int i = start; i <= end; i++) {
                mid += arr[i];
            }
            mid /= (end - start + 1);
            int mid_arr[3] = { mid - 1,mid,mid + 1 };
            int tmp;
            int min_mid = 1e9;
            for (int i = 0; i < 3; i++) {
                tmp = 0;
                for (int j = start; j <= end; j++) {
                    tmp += (int)pow(mid_arr[i] - arr[j], 2);
                }
                min_mid = min(tmp, min_mid);
            }
            memorize[start][end] = min_mid;
            res += min_mid;
        }

        if (res < min_res)
            min_res = res;
        return;
    }
    for (int i = num_idx[n] + 1; i < N - (S - n - 1); i++) {
        num_idx[n + 1] = i;
        Quantization(n + 1);
    }
}

int main() {
    int C;
    cin >> C;
    int ans[50];

    int index = 0;
    while (C--) {
        cin >> N >> S;
        for (int i = 0; i < N; i++) {
            cin >> arr[i];
        }

        fill(&memorize[0][0], &memorize[100][101], -1);
        sort(&arr[0], &arr[N]);
        min_res = 1e9;
        num_idx = (int*)malloc(sizeof(int)*(S));
        num_idx[0] = -1;

        Quantization(0);

        ans[index++] = min_res;
        delete num_idx;
    }
    for (int i = 0; i < index; i++)
        cout << ans[i] << endl;
}

์‹œ๊ฐ„ ์ดˆ๊ณผ

์ฝ”๋“œ2

#include <iostream>
#include <algorithm>

using namespace std;

int N, S;
int arr[100];
int* num_idx; // index 0์€ -1, 1 ~ S๊นŒ์ง€ ์žˆ์Œ
int min_res = 1e9;
int memorize[101][101];

int pSum[101], pSqSum[101];

void precalc() {
    pSum[0] = arr[0];
    pSqSum[0] = arr[0] * arr[0];
    for (int i = 1; i < N; ++i) {
        pSum[i] = pSum[i - 1] + arr[i];
        pSqSum[i] = pSqSum[i - 1] + arr[i] * arr[i];
    }
}

void Quantization(int n) { // ๋‚˜๋ˆˆ ํšŸ์ˆ˜
    if (n == S - 1) {
        int start = 0; int end;
        int res = 0;
        for (int i = 1; i < S+1; i++) {
            end = num_idx[i];
            if (i == S)
                end = N - 1;
            if (memorize[start][end] != -1) {
                res += memorize[start][end];
                start = end + 1;
                continue;
            }

            int sum = pSum[end] - (start == 0 ? 0 : pSum[start - 1]);
            int sqSum = pSqSum[end] - (start == 0 ? 0 : pSqSum[start - 1]);
            int m = int(0.5 + (double)sum / (end - start + 1));
            int tmp_res = sqSum - 2 * m*sum + m * m*(end - start + 1);
            memorize[start][end] = tmp_res;
            res += tmp_res;
            start = end + 1;
        }

        if (res < min_res)
            min_res = res;
        return;
    }
    for (int i = num_idx[n] + 1; i < N - (S - n - 1); i++) {
        num_idx[n + 1] = i;
        Quantization(n + 1);
    }
}

int main() {
    int C;
    cin >> C;
    int ans[50];

    int index = 0;
    while (C--) {
        cin >> N >> S;
        for (int i = 0; i < N; i++) {
            cin >> arr[i];
        }
        if (S >= N) {
            ans[index++] = min_res;
        }
        else {
            fill(&memorize[0][0], &memorize[100][101], -1);
            sort(&arr[0], &arr[N]);
            min_res = 1e9;
            num_idx = (int*)malloc(sizeof(int)*(S));
            num_idx[0] = -1;
            precalc();

            Quantization(0);

            ans[index++] = min_res;
            delete num_idx;
        }
    }
    for (int i = 0; i < index; i++)
        cout << ans[i] << endl;
}

index๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌ์šฉํ•œ part ์ˆ˜๋ฅผ ๊ธฐ๋กํ•ด์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค.

 ์ฝ”๋“œ 1๊ณผ ์ฝ”๋“œ 2์˜ ์ฐจ์ด๋Š” ์˜ค์ฐจ ์ œ๊ณฑ์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ์ค€ ๊ฒƒ๋ฟ์ด๋‹ค. ์ด๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ์ง€ ๋ชปํ–ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ํ•ด๋‹น ์ฝ”๋“œ์—์„œ๋Š” memoization์„ ํŒŒํŠธ๋กœ ๋‹ค ์ชผ๊ฐฐ์„ ๋•Œ (๋ชจ๋“  ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ๋‚˜์™”์„ ๋•Œ) ์ ์šฉ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒฝ์šฐ์—๊ฑด ๋ชจ๋“  ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๊ธดํ•ด์•ผํ•œ๋‹ค. ์ฆ‰, ์žฌ๊ท€์˜ ๊ธฐ์ €์‚ฌ๋ก€๊นŒ์ง€ ๋ฐ˜๋“œ์‹œ ๊ฐ€์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€์œผ๋‹ˆ ์žฌ๊ท€์˜ ํ˜ธ์ถœ ์ˆ˜๊ฐ€ ์ค„์ง€ ์•Š์•„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

 

 ๋ณธ์ธ์ด ๋†“์นœ ๋ถ€๋ถ„์€ ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ์ตœ์ ๋ถ€๋ถ„๊ตฌ์กฐ์ด๋ฉฐ ์ด๋ฅผ ์ด์šฉํ•ด์„œ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ํ˜„์žฌ ์œ„์น˜์—์„œ ๋‚จ์€ ํŒŒํŠธ ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋‹ค๋ฉด ์žฌ๊ท€๋ฅผ ๋”์ด์ƒ ๋ถ€๋ฅด์ง€ ์•Š์•„๋„ ๋˜๊ฒŒ๋” ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ •๋‹ต์ฝ”๋“œ

#include <iostream>
#include <algorithm>

using namespace std;

int N, S;
int arr[100];
int memo[101][11];

int pSum[101], pSqSum[101];
// pSum : idx๊นŒ์ง€์˜ ์š”์†Œ ํ•ฉ // pSqSum : idx๊นŒ์ง€์˜ ์š”์†Œ^2์˜ ํ•ฉ

void precalc() { // pSum, pSqSum ๊ตฌํ•˜๊ธฐ
    pSum[0] = arr[0];
    pSqSum[0] = arr[0] * arr[0];
    for (int i = 1; i < N; ++i) {
        pSum[i] = pSum[i - 1] + arr[i];
        pSqSum[i] = pSqSum[i - 1] + arr[i] * arr[i];
    }
}

int minError(int lo, int hi) {
    int sum = pSum[hi] - (lo == 0 ? 0 : pSum[lo - 1]);
    int sqSum = pSqSum[hi] - (lo == 0 ? 0 : pSqSum[lo - 1]);
    int m = int(0.5 + (double)sum / (hi - lo + 1)); // ํ‰๊ท  ๋ฐ˜์˜ฌ๋ฆผํ•ด์„œ ๊ณ„์‚ฐ

    int ret = sqSum - 2 * m*sum + m * m*(hi - lo + 1); // ๊ณต์‹์— ๋Œ€์ž…
    return ret;
}

int Quantization(int from, int parts) {
    if (from == N) return 0; // ๋ชจ๋“  ์ˆ˜๋ฅผ ์–‘์žํ™”ํ–ˆ์„ ๋•Œ => S๊ฐ€ N๋ณด๋‹ค ํด ๋•Œ
    if (parts == 0) return 1e9; // ๋ชจ๋“  ๋ฌถ์Œ์„ ๋‹ค ์ผ์„ ๋•Œ => ์•„์ฃผ ํฐ ์ˆ˜ return
    int& ret = memo[from][parts];
    // from๋ถ€ํ„ฐ์˜ ์š”์†Œ๋ฅผ parts๊ฐœ์˜ ๋ฌถ์Œ์œผ๋กœ ๋ฌถ๋Š” ์ตœ์†Œ์˜ ์˜ค์ฐจํ•ฉ์„ ์ €์žฅ
    if (ret != -1) return ret;
    ret = 1e9;

    for (int partSize = 1; from + partSize <= N; partSize++) {
        // ๊ฐ ๋ฌถ์Œ๋งˆ๋‹ค 1๊ฐœ๋ถ€ํ„ฐ N-ํ˜„์žฌidx ๊ฐœ๊นŒ์ง€ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ
        ret = min(ret, minError(from, from + partSize - 1) + Quantization(from + partSize, parts - 1));
        // ๋‹ค์Œ ๋ฌถ์Œ๋“ค์˜ ์˜ค์ฐจ + ํ˜„์žฌ ์˜ค์ฐจ ๊ณ„์‚ฐ
    }

    return ret;
}

int main() {
    int C;
    cin >> C;
    int ans[50];

    int index = 0;
    while (C--) {
        cin >> N >> S;
        for (int i = 0; i < N; i++) {
            cin >> arr[i];
        }

        fill(&memo[0][0], &memo[100][11], -1);
        sort(&arr[0], &arr[N]);
        precalc();
        ans[index++] = Quantization(0,S);
    }
    for (int i = 0; i < index; i++)
        cout << ans[i] << endl;
}

 ์ •๋‹ต ์ฝ”๋“œ๋Š” from์—์„œ parts๊ฐœ์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ตœ์†Œ ๋ถ€๋ถ„ํ•ฉ์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๋˜ํ•œ ์˜ค์ฐจ์ œ๊ณฑ์˜ ํ•ฉ์„ ๋งค๋ฒˆ ๊ณ„์‚ฐํ•ด๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๋Š” ๋˜์ง€ ์•Š์ง€๋งŒ ์ž…๋ ฅ๋ฒ”์œ„๊ฐ€ ์ตœ๋Œ€ 100๊ฐœ์˜ ์ˆ˜๋ฐ–์— ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•ด๋‘๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ†ตํ•ด์„œ O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์˜ค์ฐจํ•ฉ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.

pSqSum๊ณผ pSum์„ ๋ฏธ๋ฆฌ ๋‹ค ๊ตฌํ•ด๋†“๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ!

 

+) ๋ฐ˜์˜ฌ๋ฆผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•˜์˜€๋‹ค.

๋ฐ˜์˜ฌ๋ฆผ ์ˆ˜ = (int)(0.5 + ๊ธฐ์กด ์ˆ˜); // ํ•ด๋‹น ์ˆ˜์— 0.5๋ฅผ ๋”ํ•œ ํ›„ ๋‚ด๋ฆผํ•˜๋Š” ๋ฐฉ๋ฒ•

 

 

์‹œ๊ฐ„๋ณต์žก๋„

 ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

 ์šฐ์„  ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ 50๊ฐœ์ด๋ฏ€๋กœ 50 * (Quantization ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„) ๊ฐ€ ์ด ์‹œ๊ฐ„๋ณต์žก๋„์ด๋‹ค. fill์ด๋‚˜ sort, precalc ํ•จ์ˆ˜๋Š” Qunatization ํ•จ์ˆ˜๋ณด๋‹ค ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์œผ๋ฏ€๋กœ ์ƒ๋žตํ•˜์˜€๋‹ค.

 Quantization ํ•จ์ˆ˜๋Š” ์žฌ๊ท€์ ์œผ๋กœ S๊ฐ€ 10์ผ ๋•Œ 10๋‹จ๊ณ„๊นŒ์ง€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, N๊ฐœ์˜ ์ˆ˜๋ฅผ S๋ฌถ์Œ์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ (n-1)Cs ์ด๋ฏ€๋กœ ์ตœ๋Œ€ 99C9๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

N๊ฐœ์˜ ์ˆ˜ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์ด N-1๊ฐœ์ด๋ฏ€๋กœ, ์ด ์ค‘ S-1๊ฐœ๋ฅผ ์„ ํƒํ•˜๋ฉด N๊ฐœ์˜ ์ˆ˜๋ฅผ S๊ฐœ์˜ set์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

if๋ฌธ์œผ๋กœ ํ•จ์ˆ˜ ์ดˆ๋ฐ˜์— return ๋˜๋Š” ๊ฒƒ๋“ค์€ minError ๊ณ„์‚ฐ์„ ๊ฑฐ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒ๋žตํ•ด์ฃผ์—ˆ๋‹ค.

minError๋Š” ๋งค๋ฒˆ ๊ณ„์‚ฐ ์‹œ์—๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋งŽ์ด ๋“ค๊ฒ ์ง€๋งŒ, ํ•ด๋‹น ๋ฐฉ๋ฒ•์—์„œ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ์„ ํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

 

 99C9๋Š” 2*10^12 ์ •๋„์ด๋ฏ€๋กœ memorization์„ ์“ฐ์ง€ ์•Š์•˜์„ ๋•Œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ตœ๋Œ€ 50(ํ…Œ์ŠคํŠธ์ผ€์ด์Šค)*(2*10^12)(๊ฐ€๋Šฅํ•œ ๋ฌถ์Œ ๊ฒฝ์šฐ์˜ ์ˆ˜)*1(minError๋ณต์žก๋„) = 10^14 ์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ๋‚ด์— ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

=> brute force ์‹œ๊ฐ„ ๋ณต์žก๋„ : 10^14

 ํ•˜์ง€๋งŒ memorization ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ index๋ณ„๋กœ S๊ฐœ๋งŒ ์กฐ์‚ฌํ•˜๋ฉด ๋œ๋‹ค. ์ •ํ™•ํžˆ ์–˜๊ธฐํ•˜๋ฉด ๋’ค์—์„œ 10๊ฐœ๊นŒ์ง€๋Š” ๊ฐ€๋Šฅํ•œ S์˜ ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ์„œ, 10๊ฐœ๋ถ€ํ„ฐ๋Š” S๊ฐ€ 1~10๊ฐœ ๋ชจ๋‘ ์กฐ์‚ฌ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

 ๋”ฐ๋ผ์„œ index(๋’ค์—์„œ๋ถ€ํ„ฐ) 1~10์€ 1์—์„œ 10๊นŒ์ง€ ๋”ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ 55 + 11~100์€ ๊ณ„์† 10๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ 90*10 = 900 ํ•ด์„œ ์ด ์•ฝ 1000๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. ์ดํ›„ ๊ฒน์น˜๋Š” ์—ฐ์‚ฐ๋“ค์€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์œผ๋กœ ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•˜๋‹ค.

=> ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„ : 10^3

 

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค

1
9 3
1 2 3 4 6 9 10 12 13
=> 14

1
9 3
1 2 3 4 6 8 9 10 13
=> 15

2
10 3
3 3 3 1 2 3 2 2 2 1
9 3
1 744 755 4 897 902 890 6 777
=> 0 651

5
9 4
78 76 41 5 3 15 9 81 5
2 3
1 2
10 2
1 7 1 7 2 9 2 9 3 10
17 6
12 45 7 9 78 456 521 789 951 123 457 159 145 764 15 63 21
5 2
1 2 3 4 5

=> 33 0 11 4413 6

 

๊นจ๋‹ฌ์€ ์ 

  1. ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋†“๋Š” ๋ฐฉ์‹์œผ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

  2. ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์—์„œ๋Š” ์ตœ์ ๋ถ€๋ถ„๊ตฌ์กฐ์— ํ•ด๋‹นํ•˜๋Š” ์ง€ ๊ผญ ์‚ดํŽด๋ณด์ž.

    => ํ•ด๋‹นํ•œ๋‹ค๋ฉด ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง„๋‹ค.

    (๋‹จ๊ณ„ ๋ณ„๋กœ ์ž˜๋ผ์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ฐ€๋Šฅ)

  3. ๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋ฌธ์ œ์—์„œ ์ œ์‹œํ–ˆ๋“ฏ์ด ์ฃผ์†Œ๋ฅผ ๋ฐ›์•„์™€์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์ด์ƒ์ ์ด๋‹ค.

  4. ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ–ˆ์„ ๋•Œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ์ž๋ฅด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•˜๊ธฐ ์ข‹๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ์ง€ ์ƒ๊ฐํ•˜๊ณ  ๊ตฌํ˜„ํ•˜์ž.

๋ฐ˜์‘ํ˜•