๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 14503๋ฒˆ - ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

by ์•ˆ์ฃผํ˜• 2022. 8. 24.

๋ฌธ์ œ

14503๋ฒˆ: ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” Nร—M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1ร—1ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด

www.acmicpc.net

์ฝ”๋“œ

#include <iostream>
using namespace std;

int map[51][51];

int r, c, d, N, M; // d0 ๋ถ์ชฝ, d1 ๋™์ชฝ, d2 ๋‚จ์ชฝ, d3 ์„œ์ชฝ
int clean_cnt = 1;
int isclean[51][51];
bool flag = false;

bool clean(){   // ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์ฒญ์†Œํ•  ๊ณต๊ฐ„์ด ์žˆ๋Š”์ง€ ํ™•์ธ
    
    int left_r = r, left_c = c; //์™ผ์ชฝ ๋ฐฉํ–ฅ์˜ ์ฒญ์†Œํ•  ๊ณต๊ฐ„์˜ ์ขŒํ‘œ
    
    if(d == 0) left_c--;
    if(d == 1) left_r--;
    if(d == 2) left_c++;
    if(d == 3) left_r++;
    
    
    if((isclean[r-1][c] || map[r-1][c]) && (isclean[r][c-1] || map[r][c-1]) && (isclean[r+1][c] || map[r+1][c])  && (isclean[r][c+1] || map[r][c+1])) {   // ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฐฉํ–ฅ ๋ชจ๋‘ ๋ฒฝ์ผ ๊ฒฝ์šฐ
        switch (d) {
            case 0:
                if(map[r+1][c]) flag = true;  // ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.
                else r+=1; // ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
                return false;
            case 1:
                if(map[r][c-1]) flag = true;  // ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.
                else c-=1; // ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
                return false;
            case 2:
                if(map[r-1][c]) flag = true;  // ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.
                else r-=1; // ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
                return false;
            case 3:
                if(map[r][c+1]) flag = true;  // ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.
                else c+=1; // ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
                return false;
        }
    }
    else if(!isclean[left_r][left_c] && !map[left_r][left_c]){ // ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์•„์ง ์ฒญ์†Œํ•˜์ง€ ์•Š์€ ๊ณต๊ฐ„์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๋‹ค์Œ ํ•œ ์นธ์„ ์ „์ง„ํ•˜๊ณ  1๋ฒˆ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•œ๋‹ค.
        d = (d+3) % 4;
        r = left_r;
        c = left_c;
        return true;
    }
    
    d = (d+3) % 4;    // ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์ฒญ์†Œํ•  ๊ณต๊ฐ„์ด ์—†๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    return false;
    
}


int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N>>M;
    cin>>r>>c>>d;
    for(int i=0; i<N; i++){
        for(int k=0; k<M; k++){
            cin>>map[i][k];
        }
    }
    isclean[r][c] = 1;
    
    while(true){
        if(flag || r<0 || r>=N || c<0 || c>=M) break;    //๋ฒ”์œ„ ์•ˆ์— ๋“ค์ง€ ์•Š๊ฑฐ๋‚˜, ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋งŒ์กฑ ํ–ˆ์„ ๊ฒฝ์šฐ ์ค‘๋‹จ
        if(clean()){
            clean_cnt++;
            isclean[r][c] = 1;  // ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ฒญ์†Œํ•œ๋‹ค.
        }
    }
    
    cout<<clean_cnt;
}

ํ’€์ด

ํ•œ ๋•€ ํ•œ ๋•€ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ.. ๊ท€์ฐฎ์ง€๋งŒ ํ’€๋ฉด ์„ฑ์ทจ๊ฐ์ด ์ƒ๋‹นํ•œ ๋ฌธ์ œ... ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ์˜ ์ž‘๋™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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


๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ํ˜„์žฌ ๋ฐฉํ–ฅ์˜ ํ•ญ์ƒ ์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ๋ฐฉํ–ฅ์ด๋ผ๋Š” ๋ง์ด ๋ชจํ˜ธํ•ด์„œ ์ฒ˜์Œ์— ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ–ˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„์„ ๋งŽ์ด ์†Œ๋ชจํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€