[코드트리 조별과제] #07. 2차원 배열 입력, 2차원 배열에서 원소에 대한 접근

1. 2차원 배열 입력

n개의 줄에 걸쳐 각 n개의 숫자를 공백을 사이에 두고 입력받는 코드 작성하는 방법

n = 4
for _ in range(n):
    arr = list(map(int, input().split()))
    
    sum_val = sum(arr)
    print(sum_val)


입력
1 2 3 4
7 8 9 10
11 12 13 14
15 16 17 18

출력
10
34
50
66

 

위의 코드는 행 단위로 합을 구하는 코드이지만, 만약 열 단위로 합을 구해야 한다면 2차원 격자를 그대로 담아야 할 필요가 있음.  이를 위해서는, 2차원 배열에 대한 정의가 필요함. 

의미상 2차원 배열은, 다음과 같이 각 행을 리스트라 생각했을 때 이를 각 원소로 갖는 리스트라 생각할 수 있음

[[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]

 

이는 아래와 같이 작성해볼 수 있음

n = 4
arr_2d = []
for _ in range(n):
    arr_1d = list(map(int, input().split()))
    arr_2d.append(arr_1d)

print(arr_2d)

>> 출력 결과
[[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]
n = 4
arr_2d = [
    list(map(int, input().split()))
    for _ in range(n)
]
print(arr_2d)

>> 출력 결과
[[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]

 

 

2. 2차원 배열에서 원소에 대한 접근

  • 2차원 배열에서 원소에 대한 접근은 arr_2d[i][j]와 같은 형태로 이용
  • arr_2d[i][j]는 i+1행, j+1열을 의미함
"""
i/j  0  1  2  3
0    1  2  3  4
1    7  8  9 10
2   11 12 13 14
3   15 16 17 18
"""
arr_2d = [[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]
print(arr_2d[0][0]) # 1행 1열 -> 1
print(arr_2d[1][2]) # 2행 3열 -> 9

 

 

특정 위치의 원소 값을 바꾸는 것 역시 1차원 배열에서 하던 것과 마찬가지로 = 연산을 이용하여 표현이 가능함

arr_2d = [[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]
print(arr_2d[0][0]) # 1행 1열 -> 1
arr_2d[0][0] = 15
print(arr_2d[0][0]) # 1행 1열 -> 15

 

 

2차원 배열에서 len() 함수를 이용하면 행 수가 반환됨

arr_2d = [[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]
print(len(arr_2d)) # 행의 개수 -> 4