어흥

[백준 1743] 음식물 피하기 (C++) 본문

알고리즘/백준

[백준 1743] 음식물 피하기 (C++)

라이언납시오 2021. 2. 10. 15:33
728x90
반응형

문제 링크: www.acmicpc.net/problem/1743

 

1743번: 음식물 피하기

첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ 10,000)이 주어진다.  그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진

www.acmicpc.net

1. 주의할 점

- BFS로 해결하도록 한다

 

2. 구현

- Check[][] 배열을 통해 음식물이 있는 좌표는 true로 갱신한다. 문제는 좌측 상단의 좌표가 (1,1)이므로 입력받는 좌표들에 대해 -1씩 한 좌표에 음식물을 표시한다

- 전체 Check[][] 배열에 대해 탐색을 시작하며, 음식물인 지점을 주변으로 4방향 탐색을 실시하여 음식물의 크기를 구한다

- 가장 큰 음식물의 크기를 Result에 저장한다

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

struct info{
    int x,y;
};
info tmp;
int row,col,num,y,x,result=0;
bool check[100][100]={false,};
int dx[4]={0,1,0,-1};
int dy[4]={-1,0,1,0};

int main() {
    cin >>row>>col>>num;
    for(int i=0;i<num;i++){
        cin>>y>>x;
        check[y-1][x-1]=true;
    }
    for(int i=0;i<row;i++){
        for(int j=0;j<col;j++){
            if(check[i][j]){
                int cnt=1;
                queue<info> q;
                check[i][j]=false;
                tmp.x=j;
                tmp.y=i;
                q.push(tmp);
                while(!q.empty()){
                    int cx = q.front().x;
                    int cy = q.front().y;
                    q.pop();
                    for(int k=0;k<4;k++){
                        int nx = cx + dx[k];
                        int ny = cy + dy[k];
                        if(nx>=0 && ny>=0 && nx<col && ny<row && check[ny][nx]){
                            check[ny][nx]=false;
                            cnt++;
                            tmp.x=nx;
                            tmp.y=ny;
                            q.push(tmp);
                        }
                    }
                }
                result = max(result,cnt);
            }
        }
    }
    cout<<result;
    return 0;
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 14267] 회사 문화 1 (C++)  (0) 2021.02.18
[백준 2660] 회장뽑기 (C++)  (0) 2021.02.10
[백준 19236] 청소년 상어 (C++)  (0) 2021.02.10
[백준 15961] 회전 초밥 (C++)  (0) 2021.02.09
[백준 1744] 수 묶기 (C++)  (0) 2021.02.08
Comments