알고리즘 공부

[백준 2167번] 2차원 배열의 합 python

gyk7 2024. 8. 5. 17:02

1. N개의 줄에 M개의 정수로 배열이 주어진 것 해결

N, M = map(int, input().split())
li = []
for _ in range(N) :
	p = list(map(int, input().split()))
    li.append(p)

이렇게 설정해두면

이차원 배열이 잘 생성된다.

li2 = []

K = int(input())
for _ in range(K):
    sum = 0
    i,j,x,y = list(map(int, input().split()))
    for t in range(i-1,x):
        for r in range(j-1, y):
            sum+=li[t][r]
    li2.append(sum)

(i, j) 위치부터 (x, y) 위치까지(행, 열)에 저장된 수들의 합을 구해야하므로

list로 생각해보면

인덱스가 0인 것부터 시작하는 것을 고려하여

i-1 부터 x-1까지, j-1부터 y-1 까지 사이에 있는 수들을 더해야 한다.

 

반복문을 사용해서

for t in range(i-1,x):
        for r in range(j-1, y):
            sum+=li[t][r]

이렇게 더해주었고 

N, M = map(int, input().split())
li=[]
li2=[]

for _ in range(N):
    p = list(map(int,input().split()))
    li.append(p)    
# print(li)

K = int(input())
for _ in range(K):
    sum = 0
    i,j,x,y = list(map(int, input().split()))
    for t in range(i-1,x):
        for r in range(j-1, y):
            sum+=li[t][r]
    li2.append(sum)
for z in li2:
    print(z)

 

li2에 저장시켜 한 줄에 하나씩 결과값이 나오도록 했다.


python으로 돌려봤을 때에는 시간초과가 떴는데

pypy로 돌렸을 때 성공했다.

 

for문을 많이 써서 시간 초과 떴던 것 같은데

for문을 줄이고 해결할 수 있는 방법을 생각해봐야겠다.