# 14442. ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ 2
Study Repository

14442. ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ 2

by rlaehddnd0422

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

 

14442๋ฒˆ: ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ 2

์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์— M๊ฐœ์˜ ์ˆซ์ž๋กœ ๋งต์ด ์ฃผ์–ด์ง„๋‹ค. (1, 1)๊ณผ (N, M)์€ ํ•ญ์ƒ 0์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž.

www.acmicpc.net

 

 

Solution

ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ €์žฅํ•œ๋‹ค๋Š” ์ ์—์„œ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฌ ๋ฌธ์ œ์™€ ์ •ํ™•ํžˆ ๊ฐ™์€ ์œ ํ˜•์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ด์ „ ํฌ์ŠคํŒ…๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์งง๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๋๋‚ด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์†Œ์Šค ์ฝ”๋“œ 

#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <queue>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n' 
using namespace std;

vector<vector<char>> v(1001,vector<char>(1001));
bool check[1001][1001][11];
int n,m,k;
int dy[]={-1,1,0,0};
int dx[]={0,0,-1,1};

int bfs(int y,int x)
{
    queue<pair<pair<int,int>,pair<int,int>>> q;
    q.push(make_pair(make_pair(y,x),make_pair(0,0)));
    check[y][x][0]=true;

    while(!q.empty())
    {
        int y = q.front().first.first;
        int x = q.front().first.second;
        int cnt = q.front().second.first;
        int ans = q.front().second.second;

        if(y==n-1 && x==m-1)
        {
            return ans+1;
        }
        q.pop();

        for(int i=0;i<4;i++)
        {
            int ny = y + dy[i];
            int nx = x + dx[i];

            if(ny>=0 && nx>=0 && ny<n && nx<m)
            {
                if(check[ny][nx][cnt+1]==false && v[ny][nx]=='1' &&cnt<k)
                {
                    q.push(make_pair(make_pair(ny,nx),make_pair(cnt+1,ans+1)));
                    check[ny][nx][cnt+1] = true;
                }
                else if(check[ny][nx][cnt]==false && v[ny][nx]=='0')
                {   
                    q.push(make_pair(make_pair(ny,nx),make_pair(cnt,ans+1)));
                    check[ny][nx][cnt]=true;
                
                }
            }
        }
    }


    return -1;
}
int main()
{
    FASTio;
    cin >> n >> m >> k;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin >> v[i][j];
        }
    }
    int ans = bfs(0,0);
    cout << ans;

    return 0;
}

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 3์ฐจ์› ๋ฒกํ„ฐ bool check๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

check[y][x][0] => ๋ฒฝ์„ 0๋ฒˆ ๋ถ€์ˆ˜๊ณ  (x,y) ์ขŒํ‘œ๋กœ ์ด๋™

check[y][x][1] => ๋ฒฝ์„ 1๋ฒˆ ๋ถ€์ˆ˜๊ณ  (x,y) ์ขŒํ‘œ๋กœ ์ด๋™

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ queue์— ํ˜„์žฌ y์ขŒํ‘œ, x์ขŒํ‘œ, ๋ฒฝ ๋ถ€์ˆœ ํšŸ์ˆ˜(๋‹ค์Œ์ขŒํ‘œ๊ฐ€ 1์ธ๋ฐ ์ด๋™ํ•œ ํšŸ์ˆ˜), ์ด ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ BFS์ง„ํ–‰ 

 

 

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

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ