𝘚𝘭𝘰𝘸 𝘣𝘢𝘡 𝘴𝘡𝘦𝘒π˜₯𝘺

[λ°±μ€€] 7576번: ν† λ§ˆν†  - C++ λ³Έλ¬Έ

μ½”λ”©ν…ŒμŠ€νŠΈ μ€€λΉ„/λ°±μ€€

[λ°±μ€€] 7576번: ν† λ§ˆν†  - C++

.23 2022. 1. 3. 20:36
문제

철수의 ν† λ§ˆν†  농μž₯μ—μ„œλŠ” ν† λ§ˆν† λ₯Ό λ³΄κ΄€ν•˜λŠ” 큰 μ°½κ³ λ₯Ό 가지고 μžˆλ‹€. ν† λ§ˆν† λŠ” μ•„λž˜μ˜ κ·Έλ¦Όκ³Ό 같이 격자 λͺ¨μ–‘ μƒμžμ˜ 칸에 ν•˜λ‚˜μ”© λ„£μ–΄μ„œ 창고에 λ³΄κ΄€ν•œλ‹€. 

창고에 λ³΄κ΄€λ˜λŠ” ν† λ§ˆν† λ“€ μ€‘μ—λŠ” 잘 읡은 것도 μžˆμ§€λ§Œ, 아직 읡지 μ•Šμ€ ν† λ§ˆν† λ“€λ„ μžˆμ„ 수 μžˆλ‹€. 보관 ν›„ ν•˜λ£¨κ°€ μ§€λ‚˜λ©΄, 읡은 ν† λ§ˆν† λ“€μ˜ μΈμ ‘ν•œ 곳에 μžˆλŠ” 읡지 μ•Šμ€ ν† λ§ˆν† λ“€μ€ 읡은 ν† λ§ˆν† μ˜ 영ν–₯을 λ°›μ•„ 읡게 λœλ‹€. ν•˜λ‚˜μ˜ ν† λ§ˆν† μ˜ μΈμ ‘ν•œ 곳은 μ™Όμͺ½, 였λ₯Έμͺ½, μ•ž, λ’€ λ„€ λ°©ν–₯에 μžˆλŠ” ν† λ§ˆν† λ₯Ό μ˜λ―Έν•œλ‹€. λŒ€κ°μ„  λ°©ν–₯에 μžˆλŠ” ν† λ§ˆν† λ“€μ—κ²ŒλŠ” 영ν–₯을 주지 λͺ»ν•˜λ©°, ν† λ§ˆν† κ°€ 혼자 μ €μ ˆλ‘œ μ΅λŠ” κ²½μš°λŠ” μ—†λ‹€κ³  κ°€μ •ν•œλ‹€. μ² μˆ˜λŠ” 창고에 λ³΄κ΄€λœ ν† λ§ˆν† λ“€μ΄ 며칠이 μ§€λ‚˜λ©΄ λ‹€ 읡게 λ˜λŠ”μ§€, κ·Έ μ΅œμ†Œ 일수λ₯Ό μ•Œκ³  μ‹Άμ–΄ ν•œλ‹€.

ν† λ§ˆν† λ₯Ό 창고에 λ³΄κ΄€ν•˜λŠ” 격자λͺ¨μ–‘μ˜ μƒμžλ“€μ˜ 크기와 읡은 ν† λ§ˆν† λ“€κ³Ό 읡지 μ•Šμ€ ν† λ§ˆν† λ“€μ˜ 정보가 μ£Όμ–΄μ‘Œμ„ λ•Œ, 며칠이 μ§€λ‚˜λ©΄ ν† λ§ˆν† λ“€μ΄ λͺ¨λ‘ μ΅λŠ”μ§€, κ·Έ μ΅œμ†Œ 일수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. 단, μƒμžμ˜ 일뢀 μΉΈμ—λŠ” ν† λ§ˆν† κ°€ λ“€μ–΄μžˆμ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€.

 

μž…λ ₯

첫 μ€„μ—λŠ” μƒμžμ˜ 크기λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 두 μ •μˆ˜ M,N이 주어진닀. M은 μƒμžμ˜ κ°€λ‘œ 칸의 수, N은 μƒμžμ˜ μ„Έλ‘œ 칸의 수λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 단, 2 ≤ M,N ≤ 1,000 이닀. λ‘˜μ§Έ μ€„λΆ€ν„°λŠ” ν•˜λ‚˜μ˜ μƒμžμ— μ €μž₯된 ν† λ§ˆν† λ“€μ˜ 정보가 주어진닀. 즉, λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” μƒμžμ— λ‹΄κΈ΄ ν† λ§ˆν† μ˜ 정보가 주어진닀. ν•˜λ‚˜μ˜ μ€„μ—λŠ” μƒμž κ°€λ‘œμ€„μ— λ“€μ–΄μžˆλŠ” ν† λ§ˆν† μ˜ μƒνƒœκ°€ M개의 μ •μˆ˜λ‘œ 주어진닀. μ •μˆ˜ 1은 읡은 ν† λ§ˆν† , μ •μˆ˜ 0은 읡지 μ•Šμ€ ν† λ§ˆν† , μ •μˆ˜ -1은 ν† λ§ˆν† κ°€ λ“€μ–΄μžˆμ§€ μ•Šμ€ 칸을 λ‚˜νƒ€λ‚Έλ‹€.

ν† λ§ˆν† κ°€ ν•˜λ‚˜ 이상 μžˆλŠ” 경우만 μž…λ ₯으둜 주어진닀.

 

좜λ ₯

μ—¬λŸ¬λΆ„μ€ ν† λ§ˆν† κ°€ λͺ¨λ‘ 읡을 λ•ŒκΉŒμ§€μ˜ μ΅œμ†Œ λ‚ μ§œλ₯Ό 좜λ ₯ν•΄μ•Ό ν•œλ‹€. λ§Œμ•½, μ €μž₯될 λ•ŒλΆ€ν„° λͺ¨λ“  ν† λ§ˆν† κ°€ μ΅μ–΄μžˆλŠ” μƒνƒœμ΄λ©΄ 0을 좜λ ₯ν•΄μ•Ό ν•˜κ³ , ν† λ§ˆν† κ°€ λͺ¨λ‘ μ΅μ§€λŠ” λͺ»ν•˜λŠ” 상황이면 -1을 좜λ ₯ν•΄μ•Ό ν•œλ‹€.


2667번: λ‹¨μ§€λ²ˆν˜ΈλΆ™μ΄κΈ° 문제, 4963번: μ„¬μ˜ 개수 λ¬Έμ œμ™€ μœ μ‚¬ν•˜κ²Œ ν’€ 수 μžˆλ‹€.

λ‹€λ§Œ μΈμ ‘ν•œ μ˜μ—­μ˜ 수λ₯Ό μ„ΈλŠ” μ•žμ„  λ¬Έμ œμ™€ λ‹€λ₯΄κ²Œ 이 λ¬Έμ œλŠ” BFS둜 ν‘Όλ‹€. μƒμžμ— λ³΄κ΄€λ˜λŠ” ν† λ§ˆν† λ“€μ˜ μƒνƒœλ₯Ό μž…λ ₯받은 λ’€, 읡은 ν† λ§ˆν† μ˜ μ’Œν‘œλ₯Ό pairμžλ£Œν˜•μ„ κ°–λŠ” queue에 pushν•œλ‹€. μΈμ ‘ν•œ 곳에 아직 읡지 μ•Šμ€ ν† λ§ˆν† κ°€ μ‘΄μž¬ν•˜λ©΄ λͺ‡λ²ˆμ§Έλ‘œ λ°©λ¬Έλ˜μ—ˆλŠ”μ§€(λ‚ μ§œ) 값을 λ°”κΏ”μ£Όκ³ , ν•΄λ‹Ή μ’Œν‘œλ₯Ό queue에 pushν•˜μ—¬ λͺ¨λ“  λ…Έλ“œμ— λκΉŒμ§€ λ°©λ¬Έν•  λ•Œ κΉŒμ§€ BFSλ₯Ό μ‹€ν–‰ν•œλ‹€.

λ§Œμ•½ 읡지 μ•Šμ€ ν† λ§ˆν† κ°€ μ‘΄μž¬ν•˜λ©΄ -1을, λͺ¨λ‘ μ΅μ—ˆλ‹€λ©΄ κ°€μž₯ λ§ˆμ§€λ§‰μ— 읡은 λ‚ μ§œκ°€ μ–Έμ œμΈμ§€ 좜λ ₯ν•΄μ£Όλ©΄ λœλ‹€.

 

μ½”λ“œ
#include <cstdio>
#include <queue>
#define MAX 1001

using namespace std;

int tomato[MAX][MAX];
void BFS();
int dx[] = { 1, -1, 0, 0 };
int dy[] = { 0, 0, 1, -1 };
int m, n;
queue<pair<int, int> > q;

int main(void) {
    scanf("%d %d", &m, &n);
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            scanf("%d", &tomato[i][j]);
        }
    }

    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            if(tomato[i][j] == 1) {
                q.push(pair<int, int>(i, j));
            }
        }
    }
    BFS();

    int day = 0;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            if(tomato[i][j] == 0) {
                printf("-1\n");
                return 0;
            }
            else {
                day = (day > tomato[i][j] ? day : tomato[i][j]);
            }
        }
    }
    printf("%d\n", day - 1);

    return 0;
}

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

        q.pop();
        for(int i = 0; i < 4; i++) {
            if(x + dx[i] < 1 || x + dx[i] > m || y + dy[i] < 1 || y + dy[i] > n) continue;
            if(tomato[y + dy[i]][x + dx[i]] == 0) {
                tomato[y + dy[i]][x + dx[i]] = tomato[y][x] + 1;
                q.push(pair<int, int>(y + dy[i], x + dx[i]));
            }
        }
    }
}
Comments