Skip to content

Latest commit

Β 

History

History
60 lines (50 loc) Β· 2.35 KB

Q2178.md

File metadata and controls

60 lines (50 loc) Β· 2.35 KB

Q2178

문제

NΓ—M크기의 λ°°μ—΄λ‘œ ν‘œν˜„λ˜λŠ” λ―Έλ‘œκ°€ μžˆλ‹€.

λ―Έλ‘œμ—μ„œ 1은 이동할 수 μžˆλŠ” 칸을 λ‚˜νƒ€λ‚΄κ³ , 0은 이동할 수 μ—†λŠ” 칸을 λ‚˜νƒ€λ‚Έλ‹€. μ΄λŸ¬ν•œ λ―Έλ‘œκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, (1, 1)μ—μ„œ μΆœλ°œν•˜μ—¬ (N, M)의 μœ„μΉ˜λ‘œ 이동할 λ•Œ μ§€λ‚˜μ•Ό ν•˜λŠ” μ΅œμ†Œμ˜ μΉΈ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. ν•œ μΉΈμ—μ„œ λ‹€λ₯Έ 칸으둜 이동할 λ•Œ, μ„œλ‘œ μΈμ ‘ν•œ 칸으둜만 이동할 수 μžˆλ‹€.

μœ„μ˜ μ˜ˆμ—μ„œλŠ” 15칸을 μ§€λ‚˜μ•Ό (N, M)의 μœ„μΉ˜λ‘œ 이동할 수 μžˆλ‹€. 칸을 μ…€ λ•Œμ—λŠ” μ‹œμž‘ μœ„μΉ˜μ™€ 도착 μœ„μΉ˜λ„ ν¬ν•¨ν•œλ‹€.

μž…λ ₯

첫째 쀄에 두 μ •μˆ˜ N, M(2 ≀ N, M ≀ 100)이 주어진닀. λ‹€μŒ N개의 μ€„μ—λŠ” M개의 μ •μˆ˜λ‘œ λ―Έλ‘œκ°€ 주어진닀. 각각의 μˆ˜λ“€μ€ λΆ™μ–΄μ„œ μž…λ ₯으둜 주어진닀.

좜λ ₯

첫째 쀄에 μ§€λ‚˜μ•Ό ν•˜λŠ” μ΅œμ†Œμ˜ μΉΈ 수λ₯Ό 좜λ ₯ν•œλ‹€. 항상 λ„μ°©μœ„μΉ˜λ‘œ 이동할 수 μžˆλŠ” 경우만 μž…λ ₯으둜 주어진닀.

μ½”λ“œ

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int N, M;
    string board[102];
    cin >> N >> M;
    int dx[4] = {-1, 1, 0, 0};
    int dy[4] = {0, 0, -1, 1};
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++)
        cin >>board[i][j];
    }
    int dist[102][102];
    for(int i=0;i<N;i++) fill(dist[i], dist[i]+M, -1);
    queue<pair<int, int>> q;
    q.push({0, 0});
    dist[0][0] = 0;
    while(!q.empty()) {
        // 1) μƒˆλ‘œμš΄ pairλ₯Ό λ§Œλ“€μ–΄ κ°€μž₯ μœ„μ— μžˆλŠ” 값을 λŒ€μž…ν•œλ‹€
        pair<int, int> current = q.front();
        // 2) 방문을 ν™•μΈν•œ μ’Œν‘œλŠ” μ‚­μ œν•œλ‹€.
        q.pop();
        for(int i=0;i<4;i++) {
            // μƒν•˜μ’Œμš° μ’Œν‘œ
            int moveX = current.first + dx[i];
            int moveY = current.second + dy[i];
            // 3) μƒν•˜μ’Œμš°λ‘œ 움직인 μ’Œν‘œκ°€ 0보닀 μž‘κ±°λ‚˜, κ°€λ‘œ μ„Έλ‘œ μ΅œλŒ€ 길이λ₯Ό λ„˜μ–΄μ„œλ©΄ continue
            if(moveX < 0 || moveX >=N || moveY <0 || moveY >=M) continue;
            // 4) 움직인 μ’Œν‘œμ—μ„œ 0,0 λΆ€ν„°μ˜ 거리가 -1이 μ•„λ‹ˆκ±°λ‚˜(λ°©λ¬Έν•œ 적 있음), boardκ°€ 1이 μ•„λ‹ˆλ©΄ continue
            if(dist[moveX][moveY] >= 0 || board[moveX][moveY]!='1') continue;
            // μΈμ ‘ν•œ ν–‰λ ¬μ΄λ―€λ‘œ 1만 λ”ν•΄μ€Œ
            dist[moveX][moveY] = dist[current.first][current.second] + 1;
            q.push({moveX, moveY});
        }

    }
    return 0;
}