인프런 커뮤니티 질문&답변

이민형님의 프로필 이미지
이민형

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

6. 격자판 최대합

격자판 최대합

작성

·

212

0

import sys
sys.stdin = open('input.txt', 'rt')


n = int(input())
mat = [list(map(int, input().split())) for _ in range(n)]

print(mat)
print(mat[0])
print(mat[:][0])
tot = -2147000000

# 행의 합 비교
for i in range(n):
    tmp = sum(mat[i])
    if tmp > tot:
        tot = tmp

# 열의 합 비교
for i in range(n):
    tmp = sum(mat[:][i])
    if tmp > tot:
        tot = tmp

# 대각선의 합 비교
tmp = 0
for i in range(n):
    tmp += mat[i][i]
if tmp > tot:
    tot = tmp
tmp = 0
for i in range(n):
    tmp += mat[i][n-1-i]
if tmp > tot:
    tot = tmp

print(tot)

위와 같이 코드를 작성해봤는데 5번 문제만 틀렸다고 나왔습니다.

그래서 원인을 찾아봤는데

행의 합을 구하기 위해 사용한 mat[i]와 열의 합을 구하기 위해 사용한 mat[:][i]의 값이 같다고 나왔습니다.

mat[:][i]를 사용하면 i열의 수들을 반환하는 것이 아닌지 궁금합니다.

답변 1

0

안녕하세요. 제가 선생님은 아니지만.. 혹시 도움이 될까 해서 댓글 남겨 봅니다. 

리스트의 [:] 는 어떤 범위를 지정하여 부분 집합 처럼 따로 잘라오는 것 입니다 (참고 : https://dojang.io/mod/page/view.php?id=2208) 

 

지금 같이 아무 숫자도 넣지 않은 경우에는 전체 영역을 말하는 것이 됩니다. 

그러니까 mat[:] 의 0번째 와 mat의 0번째 리스트는 같은 것 을 말하는 것 입니다. 

 

열의 합을 구하려면 for문을 한번 더 쓰셔야 할 것 같습니다. 

이민형님의 프로필 이미지
이민형
질문자

array 형태랑 헷갈렸나봐요. 답변 감사합니다~

이민형님의 프로필 이미지
이민형

작성한 질문수

질문하기