โœ๏ธToday I Learned

๐Ÿ“… 2025-08-18

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ฟผ๋“œ์••์ถ• ํ›„ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ฟผ๋“œ์••์ถ• ํ›„ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

๋ฌธ์ œ ๋งํฌ
๋ฌธ์ œ ์„ค๋ช…
0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ 2n x 2n ํฌ๊ธฐ์˜ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด arr์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด arr์„ ์ฟผ๋“œ ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์••์ถ•ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์••์ถ•ํ•˜๊ณ ์ž ํ•˜๋Š” ํŠน์ • ์˜์—ญ์„ S๋ผ๊ณ  ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ S ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฐ’์ด๋ผ๋ฉด, S๋ฅผ ํ•ด๋‹น ์ˆ˜ ํ•˜๋‚˜๋กœ ์••์ถ•์‹œํ‚ต๋‹ˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, S๋ฅผ ์ •ํ™•ํžˆ 4๊ฐœ์˜ ๊ท ์ผํ•œ ์ •์‚ฌ๊ฐํ˜• ์˜์—ญ(์ž…์ถœ๋ ฅ ์˜ˆ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.)์œผ๋กœ ์ชผ๊ฐ  ๋’ค, ๊ฐ ์ •์‚ฌ๊ฐํ˜• ์˜์—ญ์— ๋Œ€ํ•ด ๊ฐ™์€ ๋ฐฉ์‹์˜ ์••์ถ•์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
arr์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ arr์„ ์••์ถ•ํ–ˆ์„ ๋•Œ, ๋ฐฐ์—ด์— ์ตœ์ข…์ ์œผ๋กœ ๋‚จ๋Š” 0์˜ ๊ฐœ์ˆ˜์™€ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„์„œ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • arr์˜ ํ–‰์˜ ๊ฐœ์ˆ˜๋Š” 1 ์ด์ƒ 1024 ์ดํ•˜์ด๋ฉฐ, 2์˜ ๊ฑฐ๋“ญ ์ œ๊ณฑ์ˆ˜ ํ˜•ํƒœ๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, arr์˜ ํ–‰์˜ ๊ฐœ์ˆ˜๋Š” 1, 2, 4, 8, ..., 1024 ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  • arr์˜ ๊ฐ ํ–‰์˜ ๊ธธ์ด๋Š” arr์˜ ํ–‰์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฆ‰, arr์€ ์ •์‚ฌ๊ฐํ˜• ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • arr์˜ ๊ฐ ํ–‰์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์€ 0 ๋˜๋Š” 1 ์ž…๋‹ˆ๋‹ค.

ํ’€์ด

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ’€์—ˆ๋‹ค.

#include <vector>

using namespace std;
bool checkQuad(vector<vector<int>>& arr,int x, int y, int size, int firstNum)
{
    for(int i=x; i<x+size; i++)
    {
        for(int j=y; j<y+size; j++)
        {
            if (arr[i][j] != firstNum) return false;
        }
    }
    return true;
}
void quad(vector<vector<int>>& arr, vector<int>& answer, int x, int y, int size)
{
    if(checkQuad(arr, x, y, size, arr[x][y]))
    {
        if(arr[x][y] == 0) answer[0]++;
        else answer[1]++;
        return;
    }
    quad(arr, answer, x, y, size/2);
    quad(arr, answer, x, y+size/2, size/2);
    quad(arr, answer, x+size/2, y, size/2);
    quad(arr, answer, x+size/2, y+size/2, size/2);
}

vector<int> solution(vector<vector<int>> arr) {
    vector<int> answer(2,0);
    
    quad(arr, answer, 0,0,arr.size());
    
    return answer;
}

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


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ฟผ๋“œ์••์ถ• ํ›„ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

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