티스토리 뷰
https://www.acmicpc.net/problem/2571
2571번: 색종이 - 3
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
이전에 푼 문제인데 그때는 브루트포스 O(N^6) 방식으로 풀었다.
https://tose33.tistory.com/758
백준 2571. 색종이 - 3
https://www.acmicpc.net/problem/2571 2571번: 색종이 - 3 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종
tose33.tistory.com
이번에는 누적합으로 O(N^3) 이 되도록 풀어봤다.
1. 높이의 누적합을 구한다
예제의 경우 대략 아래처럼 나올것이다.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
0 0 0 2 2 2 2 2 2 2 2 2 2 0 0 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0
0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0
0 0 0 4 4 4 4 4 4 4 4 4 4 0 0 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0
0 0 0 5 5 5 5 5 5 5 5 5 5 0 0 5 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0
0 0 0 6 6 6 6 6 6 6 6 6 6 1 1 6 6 6 6 6 6 6 6 6 6 0 0 0 0 0 0
0 0 0 7 7 7 7 7 7 7 7 7 7 2 2 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0
0 0 0 8 8 8 8 8 8 8 8 8 8 3 3 8 8 8 8 8 8 8 8 8 8 0 0 0 0 0 0
0 0 0 9 9 9 9 9 9 9 9 9 9 4 4 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0 0
0 0 0 10 10 10 10 10 10 10 10 10 10 5 5 10 10 10 10 10 10 10 10 10 10 0 0 0 0 0 0
0 0 0 0 0 11 11 11 11 11 11 11 11 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 12 12 12 12 12 12 12 12 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 13 13 13 13 13 13 13 13 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 14 14 14 14 14 14 14 14 9 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 15 15 15 15 15 15 15 15 10 10 0 0 0 0 0 0 0 0 0 0 0
2. 모든 좌표들에 대해 오른쪽으로 이동하면서 (가로길이를 늘리면서) 넓이를 구한다.
예를들어 위에서 (10,3)을 기준으로 탐색한다고 생각하면, 이말은 (10,3)을 좌측 하단으로 하는 직사각형을 탐색한다는 것이다.
[10][3] = 10 이므로 가로 길이가 1일때 넓이는 (1 * 10) 이다.
[10][4] = 10 이므로 가로 길이가 2일때 넓이는 (2 * 10) 이다.
[10][5] = 10 이므로 가로 길이가 3일때 넓이는 (3 * 10) 이다.
...
[10][13] = 5 이다.
그런데 우리가 현재 구하는건 (10,3)을 좌측하단으로 하는 직사각형이기 때문에 높이는 더 작은값인 5로 수정해야 직사각형이 된다.
따라서 가로 길이가 11일때는 (11 * 5) 이다.
이렇게 넓이를 계속 구해서 최댓값을 갱신해준다.
'PS' 카테고리의 다른 글
백준 1013. Contact (0) | 2022.12.19 |
---|---|
백준 3020. 개똥벌레 (0) | 2022.12.16 |
백준 1038. 감소하는 수 (0) | 2022.12.15 |
백준 2812. 크게 만들기 (0) | 2022.12.13 |
백준 1106. 호텔 (0) | 2022.12.12 |
- Total
- Today
- Yesterday
- C
- floyd warshall
- 재귀
- back tracking
- DP
- 이분탐색
- two pointer
- CSS
- Tree
- Unity
- graph
- Kruskal
- permutation
- 자료구조
- Stack
- Dijkstra
- db
- Spring
- C++
- priority queue
- BFS
- greedy
- Implementation
- 조합
- MVC
- Brute Force
- recursion
- Python
- dfs
- binary search
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |