๐
2025-08-27
๋ฌธ์ ๋งํฌ
๋ฌธ์ ์ค๋ช
๋ฉ๋ฆฌ๋ ์ฌ๋ฆ์ ๋ง์ ๋ฌด์ธ๋๋ก ์ฌํ์ ๊ฐ๊ธฐ ์ํด ์ง๋๋ฅผ ๋ณด๊ณ ์์ต๋๋ค. ์ง๋์๋ ๋ฐ๋ค์ ๋ฌด์ธ๋๋ค์ ๋ํ ์ ๋ณด๊ฐ ํ์๋ผ ์์ต๋๋ค. ์ง๋๋ 1 x 1ํฌ๊ธฐ์ ์ฌ๊ฐํ๋ค๋ก ์ด๋ฃจ์ด์ง ์ง์ฌ๊ฐํ ๊ฒฉ์ ํํ์ด๋ฉฐ, ๊ฒฉ์์ ๊ฐ ์นธ์๋ 'X' ๋๋ 1์์ 9 ์ฌ์ด์ ์์ฐ์๊ฐ ์ ํ์์ต๋๋ค. ์ง๋์ 'X'๋ ๋ฐ๋ค๋ฅผ ๋ํ๋ด๋ฉฐ, ์ซ์๋ ๋ฌด์ธ๋๋ฅผ ๋ํ๋
๋๋ค. ์ด๋, ์, ํ, ์ข, ์ฐ๋ก ์ฐ๊ฒฐ๋๋ ๋
๋ค์ ํ๋์ ๋ฌด์ธ๋๋ฅผ ์ด๋ฃน๋๋ค. ์ง๋์ ๊ฐ ์นธ์ ์ ํ ์ซ์๋ ์๋์ ๋ํ๋ด๋๋ฐ, ์, ํ, ์ข, ์ฐ๋ก ์ฐ๊ฒฐ๋๋ ์นธ์ ์ ํ ์ซ์๋ฅผ ๋ชจ๋ ํฉํ ๊ฐ์ ํด๋น ๋ฌด์ธ๋์์ ์ต๋ ๋ฉฐ์น ๋์ ๋จธ๋ฌผ ์ ์๋์ง๋ฅผ ๋ํ๋
๋๋ค. ์ด๋ค ์ฌ์ผ๋ก ๋๋ฌ ๊ฐ์ง ๋ชป ์ ํ ๋ฉ๋ฆฌ๋ ์ฐ์ ๊ฐ ์ฌ์์ ์ต๋ ๋ฉฐ์น ์ฉ ๋จธ๋ฌผ ์ ์๋์ง ์์๋ณธ ํ ๋๋ฌ๊ฐ ์ฌ์ ๊ฒฐ์ ํ๋ ค ํฉ๋๋ค.
์ง๋๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด maps๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ์ฌ์์ ์ต๋ ๋ฉฐ์น ์ฉ ๋จธ๋ฌด๋ฅผ ์ ์๋์ง ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ด์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋ง์ฝ ์ง๋ผ ์ ์๋ ๋ฌด์ธ๋๊ฐ ์๋ค๋ฉด -1์ ๋ฐฐ์ด์ ๋ด์ return ํด์ฃผ์ธ์.
์ ํ์ฌํญ
DFS๋ฅผ ์ด์ฉํด ํ์๋ค. ํ์ฌ ์นธ์์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ์ ํ์ธํด ์ด์ด์ ธ์๋ ์นธ๋ค์ ํฉ์ ๊ตฌํ๋ค. check ๋ฒกํฐ์ ๊ฐ์ผ๋ก ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํ๋ค.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void dfs(vector<string>& maps, vector<vector<bool>>& check, int row, int col, int& sum)
{
if(row<0 || row>=maps.size()) return;
if(col<0 || col>=maps[0].size()) return;
if(maps[row][col]=='X') check[row][col]=true;
if(check[row][col]) return;
sum += maps[row][col] - '0';
check[row][col] = true;
dfs(maps, check, row-1, col, sum);
dfs(maps, check, row+1, col, sum);
dfs(maps, check, row, col-1, sum);
dfs(maps, check, row, col+1, sum);
}
vector<int> solution(vector<string> maps) {
vector<int> answer;
vector<vector<bool>> check(maps.size(), vector<bool>(maps[0].size(),false));
for(int i=0; i<maps.size(); i++)
{
for(int j=0; j<maps[0].size(); j++)
{
if(maps[i][j]=='X') check[i][j]=true;
if(check[i][j]) continue;
int sum = 0;
dfs(maps, check, i, j, sum);
answer.push_back(sum);
}
}
if(answer.size()==0) answer.push_back(-1);
else
sort(answer.begin(), answer.end());
return answer;
}
์ด์ DFS๋ ์ฝ๊ฐ ์ต์ํด์ง ๊ฒ ๊ฐ๊ธฐ๋
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌด์ธ๋ ์ฌํ
์ถ์ฒ: ์คํ๋ฅดํ์ฝ๋ฉ ๋ด์ผ๋ฐฐ์์บ ํ