https://school.programmers.co.kr/learn/courses/30/lessons/68936
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
오랜만에 풀어보는 분할정복 문제다. startX, startY, len 옮겨가면서 len이 1이 될 때까지 재귀 돌게 해줬다.
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> board;
int cnt0 = 0, cnt1 = 0;
bool checkSameArea(int startX, int startY, int len) {
int areaNum = board[startX][startY];
for (int i = 0; i < len; i++)
for (int j = 0; j < len; j++)
if (areaNum != board[startX + i][startY + j])
return false;
if (board[startX][startY] == 1)
cnt1++;
else
cnt0++;
return true;
}
void recur (int startX, int startY, int len) {
if (len == 1) {
if (board[startX][startY] == 1)
cnt1++;
else
cnt0++;
return ;
}
if (checkSameArea(startX, startY, len) == false) { // 쿼드압축 불가능
int newLen = len / 2;
recur(startX, startY, newLen);
recur(startX + newLen, startY, newLen);
recur(startX, startY + newLen, newLen);
recur(startX + newLen, startY + newLen, newLen);
}
}
vector<int> solution(vector<vector<int>> arr) {
board = arr;
vector<int> answer;
recur(0, 0, arr.size());
answer.push_back(cnt0);
answer.push_back(cnt1);
return answer;
}
'<algorithm> > 프로그래머스' 카테고리의 다른 글
프로그래머스 PCCP모의고사 1회 1번 외톨이 알파벳 c++ (0) | 2023.09.06 |
---|---|
프로그래머스 무인도 여행 c++ (1) | 2023.09.02 |
프로그래머스 삼각 달팽이 c++ (0) | 2023.09.02 |
프로그래머스 게임 맵 최단거리 c++ (dfs, bfs) (0) | 2023.08.31 |
프로그래머스 단어 변환 c++ (0) | 2023.08.30 |