티스토리 뷰
문제 링크: https://www.acmicpc.net/problem/16973
16973번: 직사각형 탈출
크기가 N×M인 격자판에 크기가 H×W인 직사각형이 놓여 있다. 격자판은 크기가 1×1인 칸으로 나누어져 있다. 격자판의 가장 왼쪽 위 칸은 (1, 1), 가장 오른쪽 아래 칸은 (N, M)이다. 직사각형의 가장
www.acmicpc.net
문제 풀이
너비 우선 탐색, 누적 합
BFS를 이용하는 건 그다지 어렵지 않다. 대부분의 BFS 문제처럼 직사각형의 왼쪽 가장자리를 기준으로 방문하지 않았다면 방문해주고 벽이라면 방문하지 않는 등 일반적인 문제랑 비슷하다. 하지만 직사각형 전체 중에 벽이 있다는 걸 확인하는건 어떻게 해야할까? 먼저 H*W번을 매번 방문할 때 마다 체크해준다? 딱봐도 시간 초과날게 뻔하다. 따라서 누적 합을 이용한다. 2차원 누적 합 문제는 백준에 있으니 이 문제를 꼭 풀고 이 문제를 푸는 것을 추천한다. 그 문제의 로직을 그대로 가져와도 문제가 되지 않는다. 2차원 누적 합을 이용해서 벽의 개수를 구한다. 그리고 직사각형의 가장 왼쪽 위를 (nx, ny)라 하면 오른쪽 가장자리는 (nx+w-1, ny+h-1)이므로 이 범위 안의 누적 합을 이용해 벽이 아예 없는 경우를 체크해주면 된다. O(1)이므로 시간 초과 없이 빠르게 훑어보기가 가능하다.
코드
참고 자료
https://www.acmicpc.net/problem/11660
11660번: 구간 합 구하기 5
첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네
www.acmicpc.net
2차원 배열의 누적 합 문제이니 풀지 않았거나 기억이 안난다면 먼저 풀어볼 것을 추천한다.
'BOJ' 카테고리의 다른 글
랜덤 마라톤 14주차 (0) | 2024.09.05 |
---|---|
[BOJ][Python] 백준 9011번 - 순서 (0) | 2022.08.05 |
[BOJ][Python] 백준 4658번 - 삼각형 게임 (0) | 2022.08.03 |
[BOJ][Python] 백준 20412번 - 추첨상 사수 대작전! (Hard) (0) | 2022.07.02 |
[BOJ][Python][C++] 백준 24417번 - 알고리즘 수업 - 피보나치 수 2 (0) | 2022.04.05 |
- Total
- Today
- Yesterday
- 백트래킹
- set
- BFS
- 브루트포스
- 위상 정렬
- DP
- Implementation
- Sorting
- 다이나믹 프로그래밍
- 구현
- 볼록 껍질
- Brute Force
- Topological Sorting
- 수학
- 정렬
- MST
- BOJ
- backtracking
- convex hull
- TEXT
- 최소 신장 트리
- 시뮬레이션
- 그리디
- Simulation
- Python
- greedy
- 파이썬
- math
- 집합과 맵
- 너비 우선 탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |