Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 마이온
- BFS
- DP
- 시각화
- pyhton
- 마이온컴퍼니
- 프로젝트
- folium
- 알고리즘
- 파이썬
- GIS
- Plotly
- Join
- 멋재이사자처럼
- 멋사
- GNN
- likelionlikelion
- intern10
- likelion
- 멋쟁이사자처럼멋쟁이사자처럼
- 그리디
- Python
- TiL
- parklab
- 인턴10
- ux·ui디자인
- 멋쟁이사자처럼
- SQL
- DFS
- seaborn
Archives
- Today
- Total
지금은마라톤중
[백준] 11660번 구간 합 구하기 5 본문
실패한 접근법
- matrix를 그리고 반복문을 통해 구현
→ 시간초과로 실패
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
matrix = [list(map(int,input().split())) for _ in range(n)]
for _ in range(m):
result = 0
x1,y1, x2,y2 = map(int, input().split())
for i in range(y1, y2+1):
if x1 == x2 :
result += matrix[i-1][x1-1]
else:
result += sum(matrix[i-1][x1-1:x2])
print(result)
올바른 접근법
- 누적합 이용
- 누적합에 대한 dp를 구함
- 이전의 누적합을 활용하여 계산
dp[x][y] = dp[x-1][y] + dp[x][y-1] - dp[x-1][y-1] + matrix[x-1][y-1]
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
matrix = [list(map(int,input().split())) for _ in range(n)]
dp = [[0]*(n+1) for _ in range(n+1)]
for x in range(1,n+1):
for y in range(1,n+1):
dp[x][y] = dp[x-1][y] + dp[x][y-1] - dp[x-1][y-1] + matrix[x-1][y-1]
for i in range(m):
x1,y1,x2,y2 = map(int,input().split())
result = dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]
print(result)
'STUDY > Python 알고리즘' 카테고리의 다른 글
[백준] 1459번 걷기 (0) | 2024.05.22 |
---|---|
[백준] 2891번 카약과 강풍 (0) | 2024.05.18 |
[백준] 1912번 연속합 (0) | 2024.05.16 |
[백준] 11726번 2xn 타일링 (0) | 2024.05.15 |
[백준] 1699번 제곱수의 합 (0) | 2024.05.09 |
Comments