문제 출처 : https://www.acmicpc.net/problem/1780
Divide and Conquer를 배우며 분할정복의 가장 대표적인 예제를 풀었다. 교수님께서 말씀하신 바, 분할정복의 Design은
만약 현재 사각형이 모두 같은 값으로 이루어져 있지 않다면 Divide.
Divide한 작은 사각형(=subproblem)의 값들을 조사해서 만약 모두 같은 값이라면 Conquer( 해당 subproblem ) 해결. 만약 모두 같은 값이 아니라면 다시 recursive하게 Divide.
더 이상 Divide할 수 없다면 이것 또한 Conquer.
이 문제에서는 Optional하게 Conquer한 subproblems를 다시 병합할 필요가 없기 때문에 이 부분은 생략.
시간이 오래 걸리고 헛돌았던 이유는
과거에 이 문제를 풀었는데 현재 정석적으로 푼 것보다 시간이 훨씬 빨라 파이썬스럽게 효율적으로 코드를 작성하는 부분에 대해 공부할 경 비교하여 정리한다.
값을 key로 만든 dictionary를 활용한 깔끔한 코드.
시간 단축, 효율성을 위한 조건, 분기 위치 중요
함수에 매개변수 전달.
dq(N,(y,x)) -> dq에서 dq(n,s)로 받아 y=s[0],x=s[1]로 처리하는 것보다 dq(N,y,x) -> dq에서 dq(n,y,x) 바로 하면 속도가 유의미하다고 느낄 정도로 속도가 향상된다.