따로 문제 링크도 없고. 검색해봐도 적절히 나오는게 없어서 질문 올려봄.
매번 한 변의 길이가 s인 정사각형 2차원 배열이 주어지고, 도로의 폭 k가 주어짐.
여기서 s는 6이고 k는 2야.
이 때, 십자선을 만들었을 때, 그 안의 원소의 합이 최소인 경우를 찾아야 함.
참고로 십자선이라고 해서 무조건 배열 중앙에 있어야하는 건 아니고, 배열 귀퉁이를 포함해도 됨.
이걸 푸는 방법이 어떤 게 있을까? 난 처음에 가로선 세로선 나눠서
가로선이 최소인 경우 + 세로선이 최소인 경우 - 중간에 만나는 지점
이렇게 접근했는데, 각각이 최소라고 해서 합쳤을 때 최소가 보장이 안되더라
너희들은 어떻게 풀 것 같냐
범위가 얼마인지 몰라서 어떤 풀이든 나올 수 있겠는데 난 보고 떠오른 건 누적합 만들어서 푸는 거 그냥 나이브하게 저 십자선 안의 원소의 합을 일일이 구하는 거임 (가로 직사각형 + 세로 직사각형 - 겹치는 정사각형) 근데 단순히 일일이 이러면 더해야 하는 원소가 많아질 수록 극단적으로 효율이 안 좋아지므로 미리 누적합 배열을 만들어 두면 가로 직사각형, 세로 직사각형, 겹치는 직사각형의 원소의 합을 각각 O(1)에 구할 수 있게 됨
https://www.acmicpc.net/problem/11660
이것처럼
오 참고하봄
2차원 누적합 쓰면 O(n^2)까진 일단 쉽게 되겠네 그담은 몰?루
n <= 5000이면 누적합 테이블 2개 둬서 푸는 방법이 생각나네
그이상이면 일단 배열 담은 메모리부터 못버틸테니 범위 맞을거같긴 함
난 보고 브루트포스밖에 생각 못했는데 너네 똑똑하구나