Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- N과M
- 그래프
- C++
- BFS
- 프로그래머스
- DFS
- 최소공배수
- DP
- 배열
- vector
- 우선순위큐
- stoi
- 유클리드호제법
- 백트래킹
- priority_queue
- 백준
- 깊이우선탐색
- 오블완
- 알고리즘
- 티스토리챌린지
- int
- Set
- 문자열
- 에라토스테네스의 체
- 다이나믹프로그래밍
- 이분탐색
- 분할정복
- map
- 정렬
- Sort
Archives
- Today
- Total
안녕 세상아,
[c++/백준] 2630 색종이 만들기 본문
https://www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
분할정복 문제를 처음 접해봐서 여러 블로그들을 참고해서 풀었다.
자세한 설명에 코드에 적어놓았다.
#include <iostream>
using namespace std;
int white = 0;
int black = 0;
int map[130][130];
int n;
//x_start, y_start --> 현재 탐색하고자 하는 사분면의 가장 왼쪽 위 좌표
//s_size --> 사분면 한 변의 길이
void division(int x_start, int y_start, int s_size) {
//현재 x_start,y_start 좌표에 있는 색종이의 색 할당
int check = map[x_start][y_start];
for (int i = x_start; i < x_start + s_size; i++) {
for (int j = y_start; j < y_start + s_size; j++) {
//check와 다른 색상이 현재 사분면에 존재하는지 판별
if (check == 0 && map[i][j] == 1) {
check = 2;
}
else if (check == 1 && map[i][j] == 0) {
check = 2;
}
//다른 색상이 현재 사분면에 존재하면 나눠주기
if (check == 2) {
//오른쪽 위 사분면 탐색
division(x_start, y_start + s_size / 2, s_size / 2);
//왼쪽 위 사분면 탐색
division(x_start, y_start, s_size / 2);
//왼쪽 아래 사분면 탐색
division(x_start + s_size / 2, y_start, s_size / 2);
//오른쪽 아래 사분면 탐색
division(x_start + s_size / 2, y_start + s_size / 2, s_size / 2);
return;
}
}
}
if (check == 0)
white++;
else
black++;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
}
}
division(0, 0, n);
cout << white << endl;
cout << black << endl;
}
해도해도 모르는게 너무 많음.....자신감 급추락
'백준' 카테고리의 다른 글
[c++/백준] 11051 이항 계수 2 (0) | 2023.06.28 |
---|---|
[c++/백준] 1780 종이의 개수 (0) | 2023.06.27 |
[c++/백준] 6603 로또 (0) | 2023.06.19 |
[c++/백준] 11508 2+1 세일 (0) | 2023.06.17 |
[c++/백준] 18870 좌표 압축 (0) | 2023.06.16 |