프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 조건
- 정사각형 영역에서 영역 내부의 수가 모두 같은 값이라면 해당 영역을 수 하나로 압축시킨다.
- 그렇지 않다면 해당 영역을 같은 크기의 정사각형 영역 4개로 나누어 위의 조건을 수행한다.
풀이방법
1. 정사각형 영역을 모두 더했을 때 값이 0이라면 해당 영역 내부의 값들이 모두 0이므로 zero++
2. 정사각형 영역을 모두 더했을 때 값이 size*size라면 해당 영역 내부의 값들이 모두 1이므로 one++
3. 둘 다 아니라면 현재 영역을 같은 크기의 정사각형 영역 4개로 나누어 DFS 수행
4. DFS가 종료된 후 answer 리턴
#include <string>
#include <vector>
using namespace std;
void DFS(vector<vector<int>>& arr, int x, int y, int size, int& zero, int& one) {
if(size == 1) {
if(arr[x][y] == 1) one++;
else zero++;
return;
}
int sum = 0;
for(int i = 0; i < size; i++) {
for(int j = 0; j < size; j++)
sum += arr[x + i][y + j];
}
if(sum == 0) {
zero++;
return;
}
else if(sum == size * size) {
one++;
return;
}
else {
DFS(arr, x, y, size / 2, zero, one);
DFS(arr, x, y + size / 2, size / 2, zero, one);
DFS(arr, x + size / 2, y, size / 2, zero, one);
DFS(arr, x + size / 2, y + size / 2, size / 2, zero, one);
}
}
vector<int> solution(vector<vector<int>> arr) {
vector<int> answer(2,0);
DFS(arr, 0, 0, arr.size(), answer[0], answer[1]);
return answer;
}
'프로그래머스 > 2레벨' 카테고리의 다른 글
[프로그래머스/C++] 두 큐 합 같게 만들기 (0) | 2023.07.11 |
---|---|
[프로그래머스/C++] 무인도 여행 (0) | 2023.07.06 |
[1차] 프렌즈4블록/C++ (0) | 2023.02.21 |
롤케이크 자르기/C++ (0) | 2023.02.15 |
게임 맵 최단거리/C++ (0) | 2023.02.13 |