Baekjoon11660 - 구간 합 구하기 5 (Python)
백준 사이트 11660 - 구간 합 구하기 5 문제입니다.
이 글을 보시기 전에 문제를 풀기 위해 충분한 생각을 하셨나요? 답을 안 보고 푸는게 최대한 고민하는게 가장 중요하다고 생각합니다.!!
☑️ 1. 문제
https://www.acmicpc.net/problem/11660
☑️ 2. Input , Output
☑️ 3. 분류 및 난이도
solved.ac class 4 문제입니다.
☑️ 4. 생각한 것들
- 수학 + DP문제입니다.
- 크게 어렵지 않습니다. 어떻게 시간을 줄일 수 있을지가 관건인 문제입니다.
- 입력을 받는데, 기존 맵은 쓰일 일이 없고 그들의 합이 쓰일테니까 그들의 합으로 초기화 해줍니다.
- 행과 열이 정해져있으면 항상 그 구간의합 모양은 맵에서 봤을때 사각형이므로 가로 세로를 어떤방식으로 구할지 생각만 하면 됩니다.
5. code
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
from sys import stdin
def row_sum(row: list) -> list:
for i in range(1, len(row)):
row[i] += row[i - 1]
return row
def solution() -> None:
n, m = map(int, stdin.readline().split())
maps = []
for i in range(n):
row = list(map(int, stdin.readline().split()))
row = row_sum(row)
maps.append(row)
for j in range(m):
x1, y1, x2, y2 = map(int, stdin.readline().split())
result = 0
for x in range(x1 - 1, x2):
if y1 - 2 < 0:
result += maps[x][y2 - 1]
else:
result += maps[x][y2 - 1] - maps[x][y1 - 2]
print(result)
solution()
6. 후기
- 이문제를 토대로 Gold1 달성
c++로 작성이 필요하거나 도움이 필요하시면 댓글을 작성해주세요.!! 기록용이라 설명이 자세하지 않습니다.
This post is licensed under CC BY 4.0 by the author.