분할정복
-
알고스팟 : 울타리 잘라내기 (분할정복)알고리즘 2022. 7. 4. 22:37
처음부터 모두 조회하면서 사각형 넓이를 계산하는 완전탐색 실행시 시간초과가 발생하는 문제이다. 이 부분을 해결하기 위해서는 왼쪽과 오른쪽 부분을 나눠서 진행하는데 (분할 정렬처럼) 왼쪽부분에서 가장 큰 사각형과 오른쪽부분에서 가장 큰 사각형 넓이, 가운데에서 가운데 두개의 영역(넓이2 * 둘중에 낮은 높이), 가운데영역을 포함하여 양쪽으로 넓어지면서 계산한 사각형 중에 가장 큰 사각형을 비교하여 가장 큰 넓이를 반환해주여야 한다. c = int(input()) def max_sqare(left, right, fence): # 기저 사레 : 같은 값이면 가로 1 * 높이가 최대 직사각형 if left == right : return fence[left] # 가운데를 중심으로 나아간다 mid = (left ..
-
알고스팟 : 쿼드 트리 뒤집기 (분할정복)알고리즘 2022. 7. 4. 22:33
이미 압축되어 출력된 부분을 다시 원래 모양대로 풀고 나서 뒤집고 다시 압축하려고 하면 초과가 발생하는 문제이다. 이미 압축되어있는 버전에서 부분 별로 위와 아래만 바꿔주도록 적용해야 한다. c = int(input()) def reverse(s, idx): if s[idx] == 'w' or s[idx] =='b' : return s[idx] # x로 시작한다는 의미이므로 한칸 앞으로 idx +=1 upperLeft = reverse(s, idx) idx += len(upperLeft) upperRight = reverse(s, idx) idx += len(upperRight) lowerLeft = reverse(s, idx) idx += len(lowerLeft) lowerRight = reverse..