# 1600. ๋ง์ด ๋˜๊ณ ํ”ˆ ์›์ˆญ์ด
Study Repository

1600. ๋ง์ด ๋˜๊ณ ํ”ˆ ์›์ˆญ์ด

by rlaehddnd0422

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

 

1600๋ฒˆ: ๋ง์ด ๋˜๊ณ ํ”ˆ ์›์ˆญ์ด

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ๊ฒฉ์žํŒ์˜ ๊ฐ€๋กœ๊ธธ์ด W, ์„ธ๋กœ๊ธธ์ด H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ H์ค„์— ๊ฑธ์ณ W๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, 0์€ ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ํ‰์ง€, 1์€ ์žฅ์• ๋ฌผ์„ ๋œปํ•œ๋‹ค. ์žฅ์• ๋ฌผ์ด ์žˆ

www.acmicpc.net

 

 

(0,0)์—์„œ ์‹œ์ž‘ํ•ด์„œ (W-1,H-1)์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ์ƒํ•˜์ขŒ์šฐ ๋ฌด๋น™(ํšŸ์ˆ˜ ์ œํ•œ ์—†์Œ) , ๊ทธ๋ฆฌ๊ณ  ๋ง์˜ ๋ฌด๋น™ K๋ฒˆ์„ ์‚ฌ์šฉํ•ด์„œ ์ตœ์†Œํ•œ์˜ ๋ฌด๋น™ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋‹จ, 1๊ฐ’์œผ๋กœ๋Š” ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค.

 

์ผ๋ฐ˜์ ์ธ BFS์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.

์†”๋ฃจ์…˜์˜ ํ•ต์‹ฌ์€ 3์ฐจ์› bool ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ check[ y ์ขŒํ‘œ ] [ x ์ขŒํ‘œ ] [ ๋ง์˜ ์›€์ง์ž„ ์‚ฌ์šฉ ํšŸ์ˆ˜ (=hcnt] ์„ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

check[y][x][0] - > (x,y) ์ขŒํ‘œ๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ๋ง์˜ ์›€์ง์ž„์„ 0๋ฒˆ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ๋œป.

check[y][x][1] - > (x,y) ์ขŒํ‘œ๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ๋ง์˜ ์›€์ง์ž„์„ 1๋ฒˆ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ๋œป.

 

์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

#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;

int k,h,w;
vector < vector<int> > area(201, vector<int>(201));

bool check[201][201][31];
int dy[]={-1,1,0,0,-1,-2,-2,-1,1,2,2,1};
int dx[]={0,0,-1,1,-2,-1,1,2,-2,-1,1,2};

int bfs(int y,int x)
{   
    queue< pair< pair<int,int>,pair<int,int>>>q;
    
    // (y์ขŒํ‘œ,x์ขŒํ‘œ), (horse๋ฌด๋น™ ํšŸ์ˆ˜, ์ด ๋ฌด๋น™ ํšŸ์ˆ˜)
    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 hcnt = q.front().second.first;
        int cnt = q.front().second.second;

        q.pop();

        if(y==h-1 && x==w-1)
        {
            return cnt;
        }

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

            if(ny>=0 && nx>=0 && ny<h && nx<w && area[ny][nx]==0)
            {   

                // horse moving ์‚ฌ์šฉ
                if(hcnt<k && i>=4 && check[ny][nx][hcnt+1]==false)
                {   
                    check[ny][nx][hcnt+1] = true;
                    q.push(make_pair(make_pair(ny,nx),make_pair(hcnt+1,cnt+1)));
                }
                

                // monkey monving ์‚ฌ์šฉ
                if(i<4 && check[ny][nx][hcnt]==false)
                {
                    check[ny][nx][hcnt] = true;
                    q.push(make_pair(make_pair(ny,nx),make_pair(hcnt,cnt+1)));
                }
            }
        }

    }
    
	// ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•œ๊ฒฝ์šฐ 
    return -1;
}

int main()
{
    FASTio;
    cin >> k >> w >> h;

    // Input
    for(int i=0;i<h;i++)
    {
        for(int j=0;j<w;j++)
        {
            cin >> area[i][j];
        }
    }

    int ans = bfs(0,0);
    cout << ans;

    return 0;
}

Solution

(0,0)์—์„œ BFS๋ฅผ ์‹œ์ž‘ํ•ด์„œ BFS๋ฅผํ• ๋•Œ ํ์— ์ด ๋„ค๊ฐ€์ง€ ์š”์†Œ๋ฅผ ์ธํ’‹ํ•ด์ฃผ์—ˆ๋‹ค.

ํ์—๋Š” (ํ˜„์žฌ y์ขŒํ‘œ, ํ˜„์žฌ x์ขŒํ‘œ), (๋ง์˜ ์›€์ง์ž„ ์‚ฌ์šฉํšŸ์ˆ˜, ์ด ์›€์ง์ž„ ์ˆ˜) ๋ฅผ ์ €์žฅํ•˜์—ฌ BFS๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜์˜€๋Š”๋ฐ, 

 

์šฐ์„  ์˜์—ญ๋‚ด๋ถ€์—์„œ ํ˜„์žฌ ๋ง์˜ ์›€์ง์ž„ ์‚ฌ์šฉํšŸ์ˆ˜๊ฐ€ main์—์„œ ์ž…๋ ฅํ•œ k๊ฐ’๋ณด๋‹ค ์ž‘๊ณ , ํ•ด๋‹น ์ขŒํ‘œ๋กœ ๋ง์˜ ์›€์ง์ž„์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ€๋ณธ ์ ์ด ์—†๋‹ค๋ฉด, ํ•ด๋‹น ์ขŒํ‘œ๋กœ ๋ง์˜ ์›€์ง์ž„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ํ์— ๋ง์˜ ์›€์ง์ž„์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ์ขŒํ‘œ์™€ ๋ง์˜ ์›€์ง์ž„์„ ์˜๋ฏธํ•˜๋Š” hm+1, cnt+1์„ ํ‘ธ์‰ฌํ•ด์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์›์ˆญ์ด์˜ ์›€์ง์ž„(์ƒํ•˜์ขŒ์šฐ)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น์ขŒํ‘œ์— ๊ฐ€๋ณด์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ์— ๋‹ค์Œ ์ขŒํ‘œ์™€ hm, cnt+1์„ ํ‘ธ์‰ฌํ•ด์ค€๋‹ค.

 

์ด๋ ‡๊ฒŒ BFS๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜๋ฉด ์ด ์›€์ง์ž„ ํšŸ์ˆ˜๋ฅผ ๋ฆฌํ„ด.

๋งŒ์•ฝ ํ์— ์žˆ๋Š” ์›์†Œ๊ฐ€ ๋ชจ๋‘ pop๋  ๋™์•ˆ ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜์˜€์œผ๋ฉด -1์„ ๋ฆฌํ„ด

 

 

 

 

๋ง์˜ ์›€์ง์ž„์„ ์ €์žฅํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋งŒ ์žˆ์œผ๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

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

๋‹ค์Œ ๋ฌธ์ œ๋“ค์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ์งง๊ฒŒ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

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

 

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

N×M์˜ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ๋งต์ด ์žˆ๋‹ค. ๋งต์—์„œ 0์€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ด๊ณ , 1์€ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ๋ฒฝ์ด ์žˆ๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹น์‹ ์€ (1, 1)์—์„œ (N, M)์˜ ์œ„์น˜๊นŒ์ง€ ์ด๋™ํ•˜๋ ค ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ตœ๋‹จ ๊ฒฝ๋กœ

www.acmicpc.net

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

 

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

Study Repository

rlaehddnd0422

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