최근 풀이 : 240821
: 해맸는데 맞음.
https://www.acmicpc.net/submit/1992/82788899
최근 풀이 : 240322
- 문제를 읽어보면, 전체 원소가 동일하지 않다면 ,
왼위 , 오른위 , 왼아래 , 오른아래 4등분으로 분류하는 방식의 재귀를 생각할 수 있다.
![](https://velog.velcdn.com/images/kwt0124/post/3de767ce-3ada-416e-a040-2e5f3e9668a9/image.png)
-> 위 그림의 결과는 이렇게 나오는데. 왼위는 모두 0으로 같으니까 0
(0011) 은 오른위인데, 오른위 8칸을 분해하면 0011이다.
![](https://velog.velcdn.com/images/kwt0124/post/ec9c387c-c66e-471b-9189-cb80296975ef/image.png)
- 이런식으로 진행되는데 만약에 8 * 8칸이 모두 1이라고 한다면???
: 괄호 처리는 모르겠지만, 일단 1 이 출력된다.
코드틀을 어떻게 만들어야 하나??
- 재귀의 관점은 변경되는 인자의 값, 그리고 반환처리를 어떻게 할 것이냐 이다.
: 여기서 나는 8칸에 4칸 씩 나뉘어지고, 그리고 4등분 했을 때, 시작되는 인덱스
x, y 값이 달라진다는 것을 파악함.
void go(int _startX , int _startY , int _size) 라는 재귀 함수를 만듦.
- 그리고 틀은 이렇게 했다.
void go(int _startX , int _startY , int _size)
{
go(_startX , _startY , _size / 2);
go(_startX , _startY + _size / 2, _size / 2);
go(_startX + _size / 2, _startY , _size / 2);
go(_startX , _startY + _size / 2, _size / 2);
}
- 그 다음에 생각한 부분은 각 범위 원소간의 값 비교 이다.
: 만약 모든 원소가 1이라고 한다면 저위의 4개의 재귀를 진행할 필요가 없기 때문에 재귀 위에다가 이러한 for 문 for문을 작성함.
![](https://velog.velcdn.com/images/kwt0124/post/43d06350-9374-45ed-b9c8-d8f2b069e417/image.png)
- 그리고 만약에 아래 그림과 같은 상황이라고 한다면, 재귀 끝까지 진행해야 한다. 마지막 조건 처리에 대해 생각을 하게 되었고...
![](https://velog.velcdn.com/images/kwt0124/post/a5126112-70f1-401f-9751-c4d685e9eb37/image.png)
-> 이 때는 size == 1 일때 해당 인덱스의 값을 출력하는 방식으로 마무리 했다.
![](https://velog.velcdn.com/images/kwt0124/post/dba764c8-517c-46df-9aef-89abbbd244ff/image.png)
- 마지막 괄호 처리.
![](https://velog.velcdn.com/images/kwt0124/post/1db2ce42-f748-48f5-89a1-fb4eabe1c231/image.png)