[백준] 2589번 보물섬 (C++)

2022. 5. 8. 20:40·Algorithm/Solution
728x90

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

 

2589번: 보물섬

보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서

www.acmicpc.net


난이도 : 골드5

 

풀이 방법 :

가로 세로가 최대 50이기 때문에 전체를 돌아도 될거같아서

각 인덱스 별로 bfs를 돌려서 최댓값을 찾아줬다.

 

맨처음에 50퍼정도에서 에러가 나서 반례를 찾아봤는데

시작점을 두번 방문하는 오류가 있음을 알게 됐다.

 

시작점을 1부터 시작해서 나중에 ans-1을 빼주면 해결 

 

코드 :

 

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

int n, m, ans;
char arr[52][52];
int v[52][52];
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};

int bfs(int x, int y){
    if(arr[x][y] == 'W') return 0;
    
    int cnt = 0;
    queue<pair<int, int>> q;
    q.push(make_pair(x,y));
    v[x][y] = 1;
    while(!q.empty()){
        int xx = q.front().first;
        int yy = q.front().second;
        q.pop();
        for(int i=0;i<4;i++){
            int nx = xx+dx[i];
            int ny= yy+dy[i];
            if(nx>=0 && ny>=0 && nx<n && ny<m && arr[nx][ny] == 'L'){
                if(!v[nx][ny]) {
                    q.push(make_pair(nx,ny));
                    v[nx][ny] = v[xx][yy] + 1;
                    cnt = max(cnt, v[nx][ny]);
                }
            }
        }
    }
    return cnt;
}

int main()
{
    cin >> n >> m;
    for(int i=0;i<n;i++){
        string s;
        cin >> s;
        for(int j=0;j<m;j++){
            arr[i][j] = s[j];
        }
    }
    
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            ans = max(bfs(i, j), ans);
            for(int k=0;k<n;k++){
                memset(v[k], 0, sizeof(v[k]));
            }
            
        }
    }
    cout << ans-1;
    
    return 0;
}
728x90
저작자표시 비영리 (새창열림)

'Algorithm > Solution' 카테고리의 다른 글

[백준] 11779 최소 비용 구하기2(C++)  (0) 2022.05.11
[백준] 1005번 ACM Craft(C++)  (0) 2022.05.10
[백준] 1946 신입사원(C++)  (0) 2022.05.03
[백준] 7576 7569 토마토(C++)  (0) 2022.04.27
[백준] 8979 올림픽 C++ 코드  (0) 2022.03.17
'Algorithm/Solution' 카테고리의 다른 글
  • [백준] 11779 최소 비용 구하기2(C++)
  • [백준] 1005번 ACM Craft(C++)
  • [백준] 1946 신입사원(C++)
  • [백준] 7576 7569 토마토(C++)
BeNI
BeNI
코딩하는 블로그
  • BeNI
    코딩못하는컴공
    BeNI
  • 전체
    오늘
    어제
    • Menu (253)
      • My profile (1)
      • 회고 | 후기 (8)
      • Frontend (65)
        • Article (11)
        • Study (35)
        • 프로그래머스 FE 데브코스 (19)
      • Backend (0)
      • Algorithm (58)
        • Solution (46)
        • Study (12)
      • Major (111)
        • C&C++ (23)
        • Java (20)
        • Data Structure (14)
        • Computer Network (12)
        • Database (15)
        • Linux (6)
        • Architecture (3)
        • Lisp (15)
        • OS (1)
        • Security (2)
      • etc (2)
  • 링크

    • 깃허브
    • 방명록
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    리팩토링
    react
    프로그래머스
    파일처리
    C++
    데브코스
    Algorithm
    자료구조
    lisp
    백준
  • hELLO· Designed By정상우.v4.10.2
BeNI
[백준] 2589번 보물섬 (C++)
상단으로

티스토리툴바