문제
코드
My answer(Wrong answer)
import sys
input=sys.stdin.readline
n,m=map(int,input().split())
land=[[0 for i in range(n)] for j in range(m)]
dp=land.copy()
dp[0][0]=land[0][0]
for i in range(n):
land[i]=list(map(int,input().split()))
t=int(input())
for i in range(n):
for j in range(m):
if(i==0 or j==0):
if(i==0 and j==0):dp[i][j]=land[0][0]
elif(i==0):
dp[i][j]=dp[i][j-1]+land[i][j]
else:
dp[i][j]=dp[i-1][j]+land[i][j]
else:
dp[i][j]=land[i][j]+dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]
for i in range(t):
tmp=list(map(int,input().split()))
a,b=tmp[2]-1,tmp[3]-1
print(dp[a][b])
Another answer
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
area = [list(map(int,input().split())) for _ in range(n)]
dp = [[0]*(m+1) for _ in range(n+1)]
for i in range(1,n+1):
for j in range(1,m+1):
dp[i][j] = area[i-1][j-1] + dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1]
for _ in range(int(input())):
x,y,i,j = map(int,input().split())
print(dp[i][j] - dp[x-1][j] - dp[i][y-1] + dp[x-1][y-1])
풀이
우선 내 풀이는 틀렸는데, 내가 구현한게 뭔질 모르겠다. 나도 아래코드와 같은 점화식을 구했고 나랑 아래 코드와 다른점은 나는 dp라는배열에 구하고자하는 행,열 값을 입력하면 바로 결과가 나오게 계속해서 계산을 해줬는데 아래 코드는 누적합?방식이라서 구하고자하는 행,열값을 입력하고 무언가를 빼줬다...사실 문제도 정확하게 이해를 못하겠다. 입력값에 1,1,3,2를 입력해줬는데 앞의 1,1이 무엇을 의미하는지가 제대로 설명이 안되어있다. 그래도 점화식이 똑같고 테스트케이스가 다 돌아가는걸로 봐서는 코드자체가 문제가 아니라 그냥 뭔갈 잘못이해해서 반례가 생기는 것 같은데 그게 뭔지를 모르겠다. 나중에 질문글에 답변이 오면 수정하겠다...
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #14916- 거스름돈 (0) | 2023.08.23 |
---|---|
[Python] 백준 #1343- 폴리오미노 (0) | 2023.08.23 |
[Python] 백준 #18115 - 카드 놓기[try_again] (0) | 2022.03.02 |
[Python] 백준 #9375 - 패션왕 신해빈 (0) | 2022.03.01 |
[Python] 백준 #1302 - 베스트셀러 (0) | 2022.03.01 |