문제 설명
메리는 여름을 맞아 무인도로 여행을 가기 위해 지도를 보고 있습니다. 지도에는 바다와 무인도들에 대한 정보가 표시돼 있습니다. 지도는 1 x 1크기의 사각형들로 이루어진 직사각형 격자 형태이며, 격자의 각 칸에는 'X' 또는 1에서 9 사이의 자연수가 적혀있습니다. 지도의 'X'는 바다를 나타내며, 숫자는 무인도를 나타냅니다. 이때, 상, 하, 좌, 우로 연결되는 땅들은 하나의 무인도를 이룹니다. 지도의 각 칸에 적힌 숫자는 식량을 나타내는데, 상, 하, 좌, 우로 연결되는 칸에 적힌 숫자를 모두 합한 값은 해당 무인도에서 최대 며칠동안 머물 수 있는지를 나타냅니다. 어떤 섬으로 놀러 갈지 못 정한 메리는 우선 각 섬에서 최대 며칠씩 머물 수 있는지 알아본 후 놀러갈 섬을 결정하려 합니다.
지도를 나타내는 문자열 배열 maps가 매개변수로 주어질 때, 각 섬에서 최대 며칠씩 머무를 수 있는지 배열에 오름차순으로 담아 return 하는 solution 함수를 완성해주세요. 만약 지낼 수 있는 무인도가 없다면 -1을 배열에 담아 return 해주세요.
제한사항
- 3 ≤ maps의 길이 ≤ 100
- 3 ≤ maps[i]의 길이 ≤ 100
- maps[i]는 'X' 또는 1 과 9 사이의 자연수로 이루어진 문자열입니다.
- 지도는 직사각형 형태입니다.
모든 미방문, 숫자 정점에 대해 BFS를 한번씩 수행하면 됩니다.
#include<bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false),cin.tie(NULL);
#define mset(v) memset(v,0,sizeof(v));
#define rep(i,a) for(int i=0;i<a;++i)
#define REP(i,a) for(int i=1;i<=a;++i)
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef tuple<int, int, int>ti;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
int dy[] = { -1,0,1,0 }, dx[] = { 0,1,0,-1 }, INF = 987654321;
int v[101][101],N,M;
int bfs(int a ,int b,vector<string>&map){
int ret=0;
queue<pi>q;
q.push({a,b});
v[a][b]=1;
while(!q.empty()){
auto [y,x]=q.front();
ret+=(map[y][x]-'0');
q.pop();
rep(i,4){
int ny=y+dy[i];
int nx=x+dx[i];
if(ny>=0 && ny<N && nx>=0 && nx<M && map[ny][nx]!='X' && !v[ny][nx]){
v[ny][nx]=1;
q.push({ny,nx});
}
}
}
return ret;
}
vector<int> solution(vector<string> maps) {
vector<int> answer;
N=maps.size();
M=maps[0].length();
rep(i,N)rep(j,M)if(!v[i][j] && maps[i][j]!='X')answer.push_back(bfs(i,j,maps));
sort(answer.begin(),answer.end());
if(answer.empty())answer.push_back(-1);
return answer;
}
'programmers' 카테고리의 다른 글
[프로그래머스]연습>>등대 (0) | 2023.05.09 |
---|---|
[프로그래머스] 연습문제>>미로 탈출 (0) | 2023.05.09 |
[프로그래머스] 코딩테스트 연습2022 KAKAO TECH INTERNSHIP성격 유형 검사하기 (1) | 2023.03.03 |
[프로그래머스] 코딩테스트 연습2022 KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2023.03.03 |
[프로그래머스]코딩테스트 연습>>2023 KAKAO BLIND RECRUITMENT>>미로 탈출 명령어 (0) | 2023.01.09 |