문제
15724번: 주지수
네모 왕국의 왕인 진경대왕은 왕국의 영토를 편하게 통치하기 위해서 1X1의 단위 구역을 여러 개 묶어서 하나의 거대 행정구역인 주지수(州地數, 마을의 땅을 셈)를 만들 예정이다. 진경대왕은
www.acmicpc.net
코드
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 |