구름LEVEL - (88520) 놀이공원

1 분 소요

구름LEVEL - 놀이공원

문제 설명

입/출력 예시

예시 1

  • 입력
1
5 3
1 0 0 1 0
0 1 0 0 1
0 0 0 1 0
0 0 0 0 0
0 0 1 0 0
  • 출력
1

풀이


문제의 요구사항이 매우 간단하게 N과 K의 만큼의 정사각형에서의 탐색을 요구했다. 놀이공원을 K 정사각형으로 탐색 가능한 모든 수들 중 최소값을 리턴하면 되었다.

코드를 작성하면서 파이썬의 리스트 슬라이싱을 이용하여 pythonic한 알고리즘을 작성해보았다.

먼저 놀이공원 matrix에서 K 만큼의 구역을 새로운 리스트로 생성했다.

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_matrix = [row[0:2] for row in matrix[0:2]]
# new_matrix [[1, 2], [4, 5]]

그다음 2차원 리스트인 new_matrix의 요소들을 모두 포함하는 1차원 리스트로 변환 하였다.

matrix = [[1, 2], [4, 5]] # 2차원 리스트
sum(matrix, []) # [1, 2, 4, 5]

마지막으로 1차원 리스트의 sum()을 계산하여 원하는 값을 얻을 수 있었다.

sum(sum([row[0:2] for row in matrix[0:2]], [])) # 12

코드(Python)

t = int(input())
answer = []

for _ in range(t):
    n, k = map(int, input().split())
    matrix = []
    for _ in range(n):
        matrix.append(list(map(int, input().split())))
        
    result = []

    for y in range(n-k+1):
        for x in range(n-k+1):
            result.append(sum(sum([row[x:x+k] for row in matrix[y:y+k]], [])))

    answer.append(min(result))
    
for a in answer:
    print(a)

References

댓글남기기