728x90
반응형
목차
https://www.acmicpc.net/problem/1992
문제
문제 구현 방향
구간을 4개로 나누어 재귀만 잘해주면 금방 풀리는 문제이다.
또한 기저사례만 잘 만들어 주면 된다.
문제 풀이 시 주의점
아래와 같이 그리드를 반으로 나누면 무한 루프에 빠진다.. 주의하자!
시작점과 종점의 중간값으로 해야한다.
void quad(int startx, int starty, int endx, int endy) {
if (check(startx, starty, endx, endy)) {
cout << board[starty][startx];
return;
}
int nx = endx / 2;
int ny = endy / 2;
cout << '(';
quad(startx, starty, nx, ny);
quad(nx+1, starty, endx, ny);
quad(startx, ny+1, nx, endy);
quad(nx+1, ny+1, endx, endy);
cout << ')';
}
코드 구현
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
using namespace std;
int board[65][65] = { 0 };
int check(int startx, int starty, int endx, int endy) {
int flag =0;
for (int i = starty; i <= endy; i++) {
for (int j = startx; j <= endx; j++) {
if (i == starty && j == startx)
flag = board[i][j];
if (flag != board[i][j])
return 0;
}
}
return 1;
}
void quad(int startx, int starty, int endx, int endy) {
if (check(startx, starty, endx, endy)) {
cout << board[starty][startx];
return;
}
int nx = (startx+endx) / 2;
int ny = (starty+endy) / 2;
cout << '(';
quad(startx, starty, nx, ny);
quad(nx+1, starty, endx, ny);
quad(startx, ny+1, nx, endy);
quad(nx+1, ny+1, endx, endy);
cout << ')';
}
int main() {
int num;
string str;
cin >> num;
for (int i = 0; i < num; i++) {
cin >> str;
for (int j = 0; j < num; j++) {
board[i][j] = str[j] - '0';
}
}
quad(0,0, num-1, num-1);
return 0;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준][비트마스킹] 17471 게리맨더링 c++구현 (0) | 2024.07.12 |
---|---|
[백트래킹][완전탐색] 15684 사다리 조작 c++구현 (0) | 2024.07.11 |
[비트마스킹][브루트 포스] 19942 다이어트 c++구현 (0) | 2024.07.09 |
[백준][bfs] 3197 백조의 호수 c++ 구현 (0) | 2024.07.04 |
[백준][백트래킹] 1189 컴백홈 c++ 구현 (0) | 2024.07.02 |