누적합 문제4 질문
안녕하세요,이 문제에서 prefix 를 만드실 때 처음부터 5*5 리스트를 만드셨는데 이 아이디어는 어떻게 떠올리신 건지 궁금합니다. 저 방식이 누적합 문제를 풀 때 일반적으로 사용되는 방식인가요?저같은 경우에는 4*4형식으로 만들어서 코드를 작성하였는데 이렇게 하니 답은 맞는데 시간 초과가 뜨네용
n, m = map(int, input().split())
box2 = []
for _ in range(n):
box2.append(list(map(int, input().split())))
for i in range(n):
for j in range(n):
if i - 1 >= 0:
box2[i][j] += box2[i - 1][j]
if j - 1 >= 0:
box2[i][j] += box2[i][j - 1]
if i - 1 >= 0 and j - 1 >= 0:
box2[i][j] -= box2[i - 1][j - 1]
# 쿼리 처리
for _ in range(m):
x1, y1, x2, y2 = map(int, input().split())
answer = box2[x2 - 1][y2 - 1]
if x1 - 2 >= 0:
answer -= box2[x1 - 2][y2 - 1]
if y1 - 2 >= 0:
answer -= box2[x2 - 1][y1 - 2]
if x1 - 2 >= 0 and y1 - 2 >= 0:
answer += box2[x1 - 2][y1 - 2]
print(answer)
답변 2
1
질문 감사합니다!
질문자님이 말씀해주신 것처럼,
처음에 계산을 필요로 하는 공간보다 1칸 더 많이 만드는게 누적합의 일반적인 시작입니다 🙂
처음에 공간을 +1이나 + 10이나 + 100이나 크기가 커진다고해서 시간 복잡도나 공간 복잡도가 드라마틱하게 변하지 않아서 처음에는 필요한 공간을 만들어서 계산하는 게 유리합니다 🙂 !!
0
안녕하세요, 인프런 AI 인턴입니다.
Emilie님, 누적합 문제를 푸실 때 5x5 리스트를 사용하는 아이디어는 특정한 경우에 적용되는 일반적인 방법 중 하나입니다. 이 방식은 0번째 행과 열을 padding처럼 사용하여 인덱스 처리를 단순화하기 위해서 사용합니다. 이렇게 하면 누적합을 계산할 때, 범위를 벗어나는 경우에 대한 예외 처리를 별도로 하지 않아도 돼서 코드가 간결해지고, 논리적으로 이해하기 쉬워집니다.
Emilie님의 코드에서 시간 초과 문제가 발생한 것은 누적합을 계산하는 부분에서 비효율적으로 중복 계산이 일어나기 때문일 수 있습니다. box2[i][j]를 갱신할 때, 이미 계산된 값을 재활용하는 방식으로 코드를 최적화할 필요가 있습니다. 예를 들어, 한 번 계산된 누적합은 다시 계산하지 않도록 하거나, 누적합을 갱신할 때 더 효율적인 로직을 고려해 볼 수 있을 것입니다.
누적합 문제에서 보통 사용되는 방식이 궁금해 하시니, 누적합을 계산하기 위한 일반적인 방법들을 학습하는 것도 좋을 것 같습니다. 다양한 알고리즘 문제를 접하면서 시간 복잡도를 줄이기 위한 더 많은 기법들을 배울 수 있을 거예요.
dp[x]가 최대값이라고 확신할수 있는 이유
0
44
1
1090번 문제 질문
0
150
1
유니온파인드
0
112
1
투포인터 25:15 질문
1
128
1
#1090번 문제 반례가 궁금합니다.
0
148
1
예제코드 자바입니다
1
186
1
정수론 파트 #2247 문제에 대한 질문입니다!
0
102
0
코드 오류
0
185
1
2강 정수론 문제3 #1407 질문
0
126
0
이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?
0
154
0
1717번 최적화
0
112
0
백준 22988 문제 질문
1
193
2
[Python] 백준 1090번 문제
1
226
3
강의자료에서
1
162
2
2503 문제 제한 조건 질문!
1
249
2
백준 22988 번 문제
1
193
1
추가 강의 순서
1
180
2
(*문제 풀이)1090 테스트케이스 1번 C++
1
221
2
7강 RGB 색칠하기 질문 있습니다.
1
160
2
정수론 약수 빠르게 구하기 질문
1
257
1
1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?
1
373
2
1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.
1
223
2
누적합 문제 3번 질문
1
216
2
기억 ( 누적합 ) 강의 11660 문제
1
163
2





