[15683๐Ÿ‘] ๊ฐ์‹œ

!ยท2022๋…„ 7์›” 20์ผ
0

BFS/DFS

๋ชฉ๋ก ๋ณด๊ธฐ
17/17

์ฝ”๋“œ

#include <bits/stdc++.h>
int xdir[4] = {1,0,-1,0};    //    ๋‚จ ๋™ ๋ถ ์„œ
int ydir[4] = {0,1,0,-1};
int cdir[5] = {4,2,4,4,1};
int m,n;
int field1[15][15];
int field2[15][15];
int mn;
vector<pair<int,int>> camera;
void update(int x,int y,int dir)
{
    dir %= 4;
    while(1)
    {
        int xcur = x+xdir[dir];
        int ycur = y+ydir[dir];
        if(xcur<0||ycur<0||xcur>=n||ycur>=m||field2[xcur][ycur]==6) return;
        if(field2[xcur][ycur] != 0) continue;
        field2[xcur][ycur] = 7;
    }
}
int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    int ans = 0;
    int sum = 0;
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            cin >> field[i][j];
            if(field1[i][j] != 0 && field1[i][j] != 6)
            {
                camera.push_back({i,j}); 
                sum *= field[i][j] * (cdir[field[i][j]-1]);
            }
            if(field[i][j] == 0)
                ans++;
        }
    }
    for(int i =0;i<sum;i++)
    {
        for(int x = 0;x<n;x++)
        {
            for(int y = 0;y<m;y++)
            {
                field2[x][y] = field1[x][y];
            }
        }
        int temp = i % 4;
        for(int ca = 0;ca<camera.size();ca++)
        {
            int x = camera[ca].first;
            int y = camera[ca].second;
            if(field1[x][y] == 1)
            {
                update(x,y,temp);
            }
            else if(field1[x][y] == 2)
            {
                update(x,y,temp);
                update(x,y,temp+2);
            }
            else if(field1[x][y] == 3)
            {
                update(x,y,temp);
                update(x,y,temp+1);
            }
            else if(field1[x][y] == 4)
            {
                update(x,y,temp);
                update(x,y,temp+1);
                update(x,y,temp+2)
            }
            else if(field[x][y] == 5)
            {
                update(x,y,temp);
                update(x,y,temp+1);
                update(x,y,temp+2);
                update(x,y,temp+3);
            }
        }
        int val = 0;
        for(int x = 0;x<n;x++)
        {
            for(int y = 0;y<m;y++)
            {
                if(field[x][y] == 0)
                    val++;
            }
        }
        ans = min(val,ans);
    }
    cout << ans;
    
}

๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•œ ๋ฌธ์ œ์ด๋‹ค. ๋ฌด์—‡์ด ๋ฌธ์ œ์˜€์„๊นŒ?

  • ์ฒซ๋ฒˆ์งธ๋Š” ๋‚ด๊ฐ€ ๊ณ ๋ คํ•œ ํ’€์ด์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋„ˆ๋ฌด ์ปค ์‹คํŒจํ• ๊นŒ๋ด ์ด๋‹ค.
    3์ค‘ ๋ฐ˜๋ณต๋ฌธ๊ฐ™์ด ๋งค์šฐ ๋งŽ์€ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•ด, ์ƒ๊ฐํ•œ ํ’€์ด ๋ฐฉ๋ฒ•๋Œ€์‹  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ ๊ตฌํ˜„์กฐ์ฐจ ํ•˜์ง€ ๋ชปํ–‡๋‹ค...
    1์ดˆ ์ •๋„๋ผ๋ฉด ์•ฝ 5์–ต ์˜ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ N์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๊ณ ์•ˆํ•ด๋ณด๋„๋ก ํ•˜์ž...
  • ๋‘๋ฒˆ์งธ๋Š” ํšŒ์ „ ์ด๋‹ค. ํšŒ์ „์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค. ๋ฐฉํ–ฅ ๋ฐฐ์—ด ์— ๋Œ€ํ•œ ์ดํ•ด๋„ ์กฐ๊ธˆ ๋ถ€์กฑํ–ˆ๋‹ค. ๋™์„œ๋‚จ๋ถ ์„ ์ด๋ฏธ ์ •์˜ํ•ด๋‘๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ํ—ท๊ฐˆ๋ ธ๋‹ค.

ํšŒ์ „ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• : ๊ฐ ์นด๋ฉ”๋ผ๋Š” ์ตœ๋Œ€ 4๊ฐœ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ํšŒ์ „์ด ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๊ฐ€ 1,2๊ฐœ์ธ ์นด๋ฉ”๋ผ๋„ ์žˆ์ง€๋งŒ ์–ด์จ‹๋“  ์ตœ๋Œ€ 4์˜k์Šน ๋งŒํผ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ฒฝ์šฐ์—์„œ ์–ด๋–ป๊ฒŒ ์นด๋ฉ”๋ผ๊ฐ€ ํšŒ์ „ํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ์„๊นŒ?

์ด๋Š” 4๋กœ ๋‚˜๋ˆ„๊ณ , 4๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๊ณ ... ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 10์ง„์ˆ˜ 3461์„ 10์œผ๋กœ ๋‚˜๋ˆ„๊ณ , 10์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋ฉด 3,4,6,1 ์ด๋ผ๋Š” ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 4์˜ ๋ฐฐ์ˆ˜์— ๋Œ€ํ•ด์„œ๋„ ์ด์™€๊ฐ™์€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋„ˆ๋ฌด ์–ด๋ ค์šด ๋ฌธ์ œ๋‹ค.. ๊ทธ ๋งŒํผ ์–ป์–ด๊ฐ„ ๊ฒƒ๋„ ๋งŽ๋‹ค..!

profile
๊ฐœ๋ฐœ์ž ์ง€๋ง์ƒ

0๊ฐœ์˜ ๋Œ“๊ธ€