[TIL] 250827

๊น€์„ธํฌยท2025๋…„ 8์›” 27์ผ

โœ๏ธToday I Learned

๐Ÿ“… 2025-08-27

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฌด์ธ๋„ ์—ฌํ–‰

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฌด์ธ๋„ ์—ฌํ–‰

๋ฌธ์ œ ๋งํฌ
๋ฌธ์ œ ์„ค๋ช…
๋ฉ”๋ฆฌ๋Š” ์—ฌ๋ฆ„์„ ๋งž์•„ ๋ฌด์ธ๋„๋กœ ์—ฌํ–‰์„ ๊ฐ€๊ธฐ ์œ„ํ•ด ์ง€๋„๋ฅผ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋„์—๋Š” ๋ฐ”๋‹ค์™€ ๋ฌด์ธ๋„๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋„๋Š” 1 x 1ํฌ๊ธฐ์˜ ์‚ฌ๊ฐํ˜•๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ํ˜•ํƒœ์ด๋ฉฐ, ๊ฒฉ์ž์˜ ๊ฐ ์นธ์—๋Š” 'X' ๋˜๋Š” 1์—์„œ 9 ์‚ฌ์ด์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋„์˜ 'X'๋Š” ๋ฐ”๋‹ค๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ˆซ์ž๋Š” ๋ฌด์ธ๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋•Œ, ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๋•…๋“ค์€ ํ•˜๋‚˜์˜ ๋ฌด์ธ๋„๋ฅผ ์ด๋ฃน๋‹ˆ๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์— ์ ํžŒ ์ˆซ์ž๋Š” ์‹๋Ÿ‰์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ, ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ์นธ์— ์ ํžŒ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํ•ฉํ•œ ๊ฐ’์€ ํ•ด๋‹น ๋ฌด์ธ๋„์—์„œ ์ตœ๋Œ€ ๋ฉฐ์น ๋™์•ˆ ๋จธ๋ฌผ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์–ด๋–ค ์„ฌ์œผ๋กœ ๋†€๋Ÿฌ ๊ฐˆ์ง€ ๋ชป ์ •ํ•œ ๋ฉ”๋ฆฌ๋Š” ์šฐ์„  ๊ฐ ์„ฌ์—์„œ ์ตœ๋Œ€ ๋ฉฐ์น ์”ฉ ๋จธ๋ฌผ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณธ ํ›„ ๋†€๋Ÿฌ๊ฐˆ ์„ฌ์„ ๊ฒฐ์ •ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด maps๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ์„ฌ์—์„œ ์ตœ๋Œ€ ๋ฉฐ์น ์”ฉ ๋จธ๋ฌด๋ฅผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐฐ์—ด์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‹ด์•„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋งŒ์•ฝ ์ง€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฌด์ธ๋„๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 3 โ‰ค maps์˜ ๊ธธ์ด โ‰ค 100
  • 3 โ‰ค maps[i]์˜ ๊ธธ์ด โ‰ค 100
  • maps[i]๋Š” 'X' ๋˜๋Š” 1 ๊ณผ 9 ์‚ฌ์ด์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ์ง€๋„๋Š” ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

ํ’€์ด

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;
}

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)

์ด์ œ DFS๋Š” ์•ฝ๊ฐ„ ์ต์ˆ™ํ•ด์ง„ ๊ฒƒ ๊ฐ™๊ธฐ๋„


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ฌด์ธ๋„ ์—ฌํ–‰
์ถœ์ฒ˜: ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

0๊ฐœ์˜ ๋Œ“๊ธ€