1992. 쿼드 트리_240314 다시 풀자.

phoenixKim·2024년 3월 14일
0

백준 알고리즘

목록 보기
145/174

최근 풀이 : 240821

: 해맸는데 맞음.
https://www.acmicpc.net/submit/1992/82788899

최근 풀이 : 240322

  • 문제를 읽어보면, 전체 원소가 동일하지 않다면 ,
    왼위 , 오른위 , 왼아래 , 오른아래 4등분으로 분류하는 방식의 재귀를 생각할 수 있다.


-> 위 그림의 결과는 이렇게 나오는데. 왼위는 모두 0으로 같으니까 0
(0011) 은 오른위인데, 오른위 8칸을 분해하면 0011이다.

  • 이런식으로 진행되는데 만약에 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문을 작성함.

  • 그리고 만약에 아래 그림과 같은 상황이라고 한다면, 재귀 끝까지 진행해야 한다. 마지막 조건 처리에 대해 생각을 하게 되었고...

-> 이 때는 size == 1 일때 해당 인덱스의 값을 출력하는 방식으로 마무리 했다.

  • 마지막 괄호 처리.
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보