๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐฑ์ค€ ๋ฌธ์ œ ํ’€์ด

[๋ฐฑ์ค€] 2309๋ฒˆ_๋ธŒ๋ฃจํŠธ ํฌ์Šค_์ผ๊ณฑ ๋‚œ์Ÿ์ด

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

 

2309๋ฒˆ: ์ผ๊ณฑ ๋‚œ์Ÿ์ด

์•„ํ™‰ ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‚œ์Ÿ์ด๋“ค์˜ ํ‚ค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ํ‚ค๋Š” 100์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ์•„ํ™‰ ๋‚œ์Ÿ์ด์˜ ํ‚ค๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๊ฐ€๋Šฅํ•œ ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

๋ฌธ์ œ

์™•๋น„๋ฅผ ํ”ผํ•ด ์ผ๊ณฑ ๋‚œ์Ÿ์ด๋“ค๊ณผ ํ•จ๊ป˜ ํ‰ํ™”๋กญ๊ฒŒ ์ƒํ™œํ•˜๊ณ  ์žˆ๋˜ ๋ฐฑ์„ค ๊ณต์ฃผ์—๊ฒŒ ์œ„๊ธฐ๊ฐ€ ์ฐพ์•„์™”๋‹ค. ์ผ๊ณผ๋ฅผ ๋งˆ์น˜๊ณ  ๋Œ์•„์˜จ ๋‚œ์Ÿ์ด๊ฐ€ ์ผ๊ณฑ ๋ช…์ด ์•„๋‹Œ ์•„ํ™‰ ๋ช…์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

์•„ํ™‰ ๋ช…์˜ ๋‚œ์Ÿ์ด๋Š” ๋ชจ๋‘ ์ž์‹ ์ด "๋ฐฑ์„ค ๊ณต์ฃผ์™€ ์ผ๊ณฑ ๋‚œ์Ÿ์ด"์˜ ์ฃผ์ธ๊ณต์ด๋ผ๊ณ  ์ฃผ์žฅํ–ˆ๋‹ค. ๋›ฐ์–ด๋‚œ ์ˆ˜ํ•™์  ์ง๊ด€๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ฐฑ์„ค๊ณต์ฃผ๋Š”, ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ์ผ๊ณฑ ๋‚œ์Ÿ์ด์˜ ํ‚ค์˜ ํ•ฉ์ด 100์ด ๋จ์„ ๊ธฐ์–ตํ•ด ๋ƒˆ๋‹ค.

์•„ํ™‰ ๋‚œ์Ÿ์ด์˜ ํ‚ค๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฐฑ์„ค๊ณต์ฃผ๋ฅผ ๋„์™€ ์ผ๊ณฑ ๋‚œ์Ÿ์ด๋ฅผ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

โ€‹

์ž…๋ ฅ

์•„ํ™‰ ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‚œ์Ÿ์ด๋“ค์˜ ํ‚ค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ํ‚ค๋Š” 100์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ์•„ํ™‰ ๋‚œ์Ÿ์ด์˜ ํ‚ค๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๊ฐ€๋Šฅํ•œ ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

์ถœ๋ ฅ

์ผ๊ณฑ ๋‚œ์Ÿ์ด์˜ ํ‚ค๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ์ผ๊ณฑ ๋‚œ์Ÿ์ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

โ€‹


๋ธŒ๋ฃจํŠธ ํฌ์Šค

์ง์Šน์„ ๋œปํ•˜๋Š” brute์™€ ํž˜์„ ๋œปํ•˜๋Š” force์˜ ํ•ฉ์„ฑ์–ด๋กœ ๋‚œํญํ•œ ํž˜์ด๋ผ๋Š” ๋œป์ด๋‹ค. ์™œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‚œํญํ•œ ํž˜์ด๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ์„๊นŒ? ๊ทธ ์ด์œ ๋Š” ๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌํ˜„ ํŠน์ง•์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

โ€‹

โ–ท ํƒ์ƒ‰ ๋ฐฉ๋ฒ•

๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํƒ์ƒ‰ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

โ€‹

โ–ท ์žฅ๋‹จ์ 

์žฅ์  : ๊ตฌํ˜„์ด ์‰ฝ๊ณ , ํ•ญ์ƒ 100% ํ™•๋ฅ ๋กœ ์ •๋‹ต์„ ๋ณด์žฅํ•œ๋‹ค.

๋‹จ์  : ์‹œ๊ฐ„์  ์ธก๋ฉด์—์„œ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๊ฐ€ ์กฐ๊ธˆ๋งŒ ๋ณต์žกํ•ด์ ธ๋„ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ธŒ๋ฃจํŠธ ํฌ์Šค์™€ ๋ฐ˜๋Œ€์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งค ์ˆœ๊ฐ„ ๋‹น์‹œ์— ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ฒƒ์„ ํ•ด๋‹ต์œผ๋กœ ์„ ํƒํ•œ๋‹ค. Greedy ์š•์‹ฌ์ด๋ผ๋Š” ๋œป์„ ๊ฐ€์ง„ ์ด์œ ์ด๋‹ค.

โ€‹

โ–ท ์žฅ๋‹จ์ 

์žฅ์  : ์ตœ์ ํ•ด์— ๊ทผ์‚ฌํ•œ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์  : ๊ตฌํ•œ ๊ฐ’์ด ๋ฌด์กฐ๊ฑด ์ •๋‹ต์ด๋ผ๋Š” ๋ณด์žฅ์ด ์—†๋‹ค.


์ฝ”๋“œ ์„ค๋ช…

1. algorithm ํ—ค๋”

โ€‹

sort ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํฌํ•จํ•œ ํ—ค๋”์ด๋‹ค.

sort ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•œ ํ•จ์ˆ˜์ด๋‹ค.

sort ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

sort(๋ฐฐ์—ด์˜ ์‹œ์ž‘์  ์ฃผ์†Œ, ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ฃผ์†Œ + 1)๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๋งŒ์•ฝ 10๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด a๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด, sort(a, a+10)๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.

โ€‹

2. sevenDwarfs ํ•จ์ˆ˜

โ€‹

for (int i = 0; i < n; i++) {

for (int j = i + 1; j < n; j++) {

if (sum - arr[i] - arr[j] == 100) {

for (int k = 0; k < n; k++) {

if (i == k || j == k) continue;

cout << arr[k] << '\n';

}

return 0;

}

}

}

โ€‹

- ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ

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

๋ฐฐ์—ด์˜ ์ฒ˜์Œ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.

- ๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ

for (int j = i + 1; j < n; j++)

๋ฐฐ์—ด์˜ ๋‹ค์Œ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.

์ด์ค‘ for ๋ฌธ์„ ํ†ตํ•ด i๋Š” ์ผ๊ณฑ ๋‚œ์Ÿ์ด์— ์†ํ•˜์ง€ ์•Š์€ ๋‚œ์Ÿ์ด 1๋ช…์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , j๋Š” ๋˜ ๋‹ค๋ฅธ ์ผ๊ณฑ ๋‚œ์Ÿ์ด์— ์†ํ•˜์ง€ ์•Š์€ ๋‚œ์Ÿ์ด 1๋ช…์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

- i ๋‚œ์Ÿ์ด์™€ j ๋‚œ์Ÿ์ด๋ฅผ ๋นผ๊ณ  ํ•ฉ์ด 100์ด ๋˜๋Š”์ง€ ๊ฒ€์‚ฌ

if (sum - arr[i] - arr[j] == 100)

- ํ•ฉ์ด 100์ผ ๋•Œ

if (i == k || j == k) continue;

ํ•ฉ์ด 100์ด๋ฉด ์ผ๊ณฑ ๋‚œ์Ÿ์ด๊ฐ€ ๋งž์œผ๋ฏ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์ด๋•Œ k๊ฐ€ i์ด๊ฑฐ๋‚˜ j ์ด๋ฉด continue๋ฅผ ํ†ตํ•ด ๊ฑด๋„ˆ๋›ด๋‹ค.


์ฝ”๋“œ

#include <iostream>
#include <algorithm>
using namespace std;

int const n = 9;

int sevenDwarfs(int sum, int *arr)
{
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (sum - arr[i] - arr[j] == 100) {
                for (int k = 0; k < n; k++) {
                    if (i == k || j == k) continue;
                    cout << arr[k] << '\n';
                }
                return 0;
            }
        }
    }
}

int main() {
    int arr[n];
    int sum = 0;

    for (int i = 0; i < n; i++) {
        cin >> arr[i];
        sum += arr[i];
    }

    sort(arr, arr + n);

    sevenDwarfs(sum, arr);
    return 0;
}