[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค :: ์ˆซ์ž์•ผ๊ตฌ (brute force)

 

์ˆซ์ž์•ผ๊ตฌ

์ฝ”๋“œ
#include <string>
#include <vector>

using namespace std;

bool check(int* arr, vector<int>& bb) {
    int num = bb[0]; int s = bb[1]; int b = bb[2];
    int n[3]; n[0] = num / 100; n[1] = (num - n[0] * 100) / 10; n[2] = (num - n[0] * 100 - n[1] * 10);
    //strike check
    int t_num = 0;
    for (int i = 0; i < 3; i++) {
        if (n[i] == arr[i])
            t_num++;
    }
    if (t_num != s)
        return false;
    t_num = 0;
    for (int i = 0; i < 3; i++) {
        if (n[i] == arr[(i + 1) % 3] || n[i] == arr[(i + 2) % 3])
            t_num++;
    }
    if (t_num != b)
        return false;
    return true;
}

int solution(vector<vector<int>> baseball) {
    int answer = 0;
    int size = baseball.size();

    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= 9; j++) {
            if (j == i)
                continue;
            for (int k = 1; k <= 9; k++) {
                if (k == i || k == j)
                    continue;
                int flag = 1;
                int arr[3] = { i,j,k };
                for (int l = 0; l < size; l++) {
                    if (!check(arr, baseball[l])) {
                        flag = 0;
                        break;
                    }
                }
                if (flag)
                    answer++;
            }
        }
    }
    return answer;
}
์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…
  1. ์„ธ ์ž๋ฆฌ ์ˆ˜๋ฅผ 1~9๊นŒ์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜๋กœ ์™„์ „ ํƒ์ƒ‰ํ•˜๋ฉด์„œ check ํ•  ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
  2. check ํ•  ์ˆ˜๋ฅผ ์ด๋ฏธ ์ฃผ์–ด์ง„ baseball vector์— ๋งž๋Š”์ง€ check ํ•œ๋‹ค.
    1. strike ํšŸ์ˆ˜๋Š” ๊ฐ™์€ ์œ„์น˜์— ๊ฐ™์€ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    2. ball ํšŸ์ˆ˜๋Š” ๋‹ค๋ฅธ ์œ„์น˜์— ๊ฐ™์€ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„

์ˆซ์ž๊ฐ€ 3์ž๋ฆฌ ์ˆ˜์ด๊ณ  ๊ฐ ์ž๋ฆฌ๋งˆ๋‹ค 1~9๊นŒ์ง€ ๋Œ๋ฉด์„œ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— checkํ•ด์•ผํ•  ์ˆ˜๋Š” 9*8*7 =504 ๊ฐœ์ด๋‹ค. ํ•œ ์ˆ˜๋งˆ๋‹ค baseball vector ๊ฐฏ์ˆ˜๋งŒํผ check๋ฅผ ํ•˜๋Š”๋ฐ, check ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ƒ์ˆ˜์ด๋ฏ€๋กœ baseball vector์˜ ๊ฐฏ์ˆ˜๋ฅผ n์œผ๋กœ ํ•˜๋ฉด n๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ ์ˆซ์ž๋งˆ๋‹ค n๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ 504๊ฐœ์˜ ์ˆ˜๋ฅผ checkํ•˜๋Š”๋ฐ์—๋Š” 504n ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

ํ•จ์ •

์ฒ˜์Œ์— brute force ๋ฌธ์ œ์ธ์ง€ ๊นŒ๋จน๊ณ  ์กฐ๊ฑด์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ ๊ต‰์žฅํžˆ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ–ˆ๋‹ค. strike, ball ์˜ ์กฐ๊ฑด์ด ํ•ด๋‹น ์œ„์น˜์— ๊ทธ ์š”์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์ •๋ณด๋งŒ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์œ„์น˜์— ๊ทธ ์š”์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์ •๋ณด๋„ ํฌํ•จํ•ด์•ผํ•˜๋ฏ€๋กœ ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค.

ex_) 123 1 1 ์ด๋ฉด

strike๊ฐ€ 1์ด๋‹ˆ๊นŒ 1xx , x2x, xx3 ์ด ํ›„๋ณด๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‚จ์€ ๋‘ ์ž๋ฆฌ์— ํ•ด๋‹น ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋Š” ์ •๋ณด๋„ ํฌํ•จํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ brute force๊ฐ€ ์ด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•