[ 해결 방법 ]시작 점부터 끝점까지 이중 for문을 돌면서 모두 색이 같은지 판단합니다. 만약 색이 다르다면 이중 for문을 돌던 영역을 9등분해서 다시 이중 for문을 돕니다. 모두 같은 숫자의 종이가 될 때까지 계속 돌면 문제를 해결할 수 있습니다. [ 코드 ]#include #define MAX2500using namespace std;struct point{int x, y;}; int N, Type[3];int board[MAX][MAX]; void InData(){cin >> N;for(int i = 1; i board[i][j];} void DQ(point from, point to){int pcr, cr;pcr = board[from.y][from.x]; for(int y = from.y; y
[ 해결 방법 ]원판이 몇 개가 있든 1번 장대에 원판이 2개가 있는 것처럼 생각하면 된다.1번 장대에 원판이 2개 있다고 생각하면 처리 과정은 3단계이다. 1. 1 -> 22. 1 -> 33. 2 -> 3원판이 n개 있을 때는 어떻게 진행할까?제일 위에 원판 n-1개를 묶어서 움직이면 된다. 물론 그렇게 움직이면 안되지만 일단 가능하다고 생각을 해보자. 그러면 위의 경우처럼 3가지 밖에 안나온다. 앞에서 n-1개의 원판을 2번 장대로 옮긴다고 했는데 어떻게 가능할까? 1번장대에서 n-2개의 원판을 3번 장대로 옮겨놓고 제일 아래 원판을 2번장대로 옮겨놓고 다시 3번장대의 n-2개를 2번으로 옮기면 된다. 이것도 3번만에 가능하다.어떻게 해야할지 감이 오지 않나? 재귀적인 방법이 눈에 들어온다. 처음에 ..
[ 해결 방법 ]재귀를 이용해서 문제를 풀었다. 재귀함수(시작점, 종료점)처럼 함수를 만들었다. 시작점부터 종료점까지 for문을 돌면서 색이 모두 같으면 그 색을 출력했고 다르면, 시작점부터 종료점까지의 면적을 4등분해서 4개의 재귀를 호출했다. [ 코드 ]#include #define MAX65using namespace std;int N;bool img[MAX][MAX];void div(int sx, int sy, int ex, int ey){bool p_cr, cr;int cnt = 0;p_cr = cr = img[sy][sx];for (int y = sy; y