• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

봉우리 문제에서 0으로 감쌀때 이런식으로 하는건안되나요?

22.01.24 01:08 작성 조회수 97

0

n = int(input())
# 5
l = [[0]*(n+2)]*(n+2)
a = [list(map(int, input().split())) for _ in range(n)]
'''
5 3 7 2 3 3 7 1 6 1 7 2 5 3 4 4 3 6 4 1 8 7 3 5 2
'''
for i in range(n):
    for j in range(n):
        l[i+1][j+1]=a[i][j]
   

 

5x5로 받아준 2차원 행렬을 0으로 감싸고싶어서 

for문돌려서 저런식으로했는데 값이 이상해서 for문안에서찍어보니

print(i, j, l[i+1][j+1], a[i][j], sep=', ')

0, 0, 0, 5

0, 1, 0, 3

0, 2, 0, 7

0, 3, 0, 2

0, 4, 0, 3

 

1, 0, 5, 3

1, 1, 3, 7

1, 2, 7, 1

1, 3, 2, 6

1, 4, 3, 1

 

2, 0, 3, 7

2, 1, 7, 2

2, 2, 1, 5

2, 3, 6, 3

2, 4, 1, 4

 

3, 0, 7, 4

3, 1, 2, 3

3, 2, 5, 6

3, 3, 3, 4

3, 4, 4, 1

 

4, 0, 4, 8

4, 1, 3, 7

4, 2, 6, 3

4, 3, 4, 5

4, 4, 1, 2

이런식으로 나오는데 원래 

l = [[0]*(n+2)]*(n+2)

이런식으로 리스트 생성하면 칼럼 전부 다같이 변하나요????

느낌으로는 주소 참조 형식때문인것같은데

리스트 l을 만들때 저런식으로만들면안되고 그냥 하나하나 0을찍어야할까요?

답변 1

답변을 작성해보세요.

0

안녕하세요^^

l = [[0]*(n+2)]*(n+2)

 

위와 같이 2차원을 만들면 첫 번째 행을 반복해서 얕은복사되는 것이라 첫행을 바꾸면 모든 행이 바뀌는 일이 일어납니다.