2022. 10. 26. 21:13ㆍ파이썬(Python)
1. 2차원 배열 입력
- n개의 줄에 걸쳐 각 n개의 숫자를 공백을 사이에 두고 입력.
- 행 단위로 합을 구할 때
n=int(input())
for _ in range(n):
arr=list(map(int,input().split()))
print(sum(arr))
결과
>> 4
>> 1 2 3 4
10
>> 5 6 7 8
26
>> 9 10 11 12
42
>> 13 14 15 16
58
- 위와 같은 방법으로는 행 단위로 합을 구할 수 있지만 열 단위로 합을 구하는 것은 불가능.
- 열 단위의 합을 구하기 위해서 2차원 배열을 사용
[[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]]
- 각 원소는 행을 의미
n=int(input())
arr2=[]
for _ in range(n):
arr1=list(map(int,input().split()))
arr2.append(arr1)
print(arr2)
결과
>> 4
>> 1 2 3 4
>> 5 6 7 8
>> 9 10 11 12
>> 13 14 15 16
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
- for 안에 append만 사용하는 경우 list comprehension을 이용 가능
n=int(input())
arr2=[list(map(int,input().split())) for _ in range(n)]
print(arr2)
결과
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
- 2차원 배열의 원소는 arr2 [i][j]. (i+1행, j+1열에 위치한 원소)
n=int(input())
arr2=[list(map(int,input().split())) for _ in range(n)]
print(arr2[1][2]) # 2행 3열
print(arr2[0][3]) # 1행 4열
결과
>> 4
>> 1 2 3 4
>> 5 6 7 8
>> 9 10 11 12
>> 13 14 15 16
7
4
- 특정 위치의 원소 값 바꾸기
- '=' 연산 사용
n=int(input())
arr2=[list(map(int,input().split())) for _ in range(n)]
print(arr2[1][2]) # 2행 3열
arr2[1][2]=100
print(arr2)
결과
>> 4
>> 1 2 3 4
>> 5 6 7 8
>> 9 10 11 12
>> 13 14 15 16
7
[[1, 2, 3, 4], [5, 6, 100, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
- 2차원 배열에서 len() 함수를 행 수가 반환
n=int(input())
arr2=[list(map(int,input().split())) for _ in range(n)]
print(len(arr2))
결과
>> 4
>> 1 2 3 4
>> 5 6 7 8
>> 9 10 11 12
>> 13 14 15 16
4
Q) 배열의 합
- n개의 줄에 n개의 자연수 입력
- 각 열의 합을 출력
n=int(input())
arr2=[list(map(int,input().split())) for _ in range(n)]
sum_val=0
for i in range(n):
for j in range(n):
sum_val+=arr2[j][i]
print(sum_val)
sum_val=0
- 열 단위의 합이므로 (arr2 [0][0]+arr2 [1][0]+arr2 [2][0]+...+arr2 [n-1][0]), (arr2 [0][1]+arr2 [1][1]+arr2 [2][1]+...+arr2 [n-1][1]), (arr2 [0][n-1]+arr2 [1][n-1]+arr2 [2][n-1]+...+arr2 [n-1][n-1])
- 각각의 원소를 sum_val에 더해 준다.
- sum_val을 출력 후, sum_val을 0으로 초기화하여 새로운 값을 계산
결과
>> 4
>> 1 2 3 4
>> 5 6 7 8
>> 9 10 11 12
>> 13 14 15 16
28
32
36
40
Q) 대소문자 바꾸기
- 자연수 a, b를 입력하여 a행 b열로 이루어진 2차원 배열을 만든다.
- a행 b열의 모든 원소는 알파벳이다.
- 알파벳 대문자는 소문자로 소문자는 대문자로 바꿔 출력.
a,b=map(int,input().split())
arr=[input().split() for _ in range(a)]
for i in range(a):
for j in range(b):
# 소문자 -> 대문자
if ord(arr[i][j])>= ord('a') and ord(arr[i][j])<=ord('z'):
arr[i][j]=chr(ord(arr[i][j])-32)
# 대문자 -> 소문자
elif ord(arr[i][j])>= ord('A') and ord(arr[i][j])<=ord('Z'):
arr[i][j]=chr(ord(arr[i][j])+32)
for i in range(a):
for j in range(b):
print(arr[i][j],end=' ')
print()
- ord(arr [i][j])가 ord('a') 보다 크거나 같고 ord('z') 보다 작거나 같으면 32를 빼서 chr로 묶어 arr [i][j]에 갱신한다.
- ord(arr [i][j])가 ord('A') 보다 크거나 같고 ord('Z') 보다 작거나 같으면 32를 더해서 chr로 묶어 arr [i][j]에 갱신한다.
Q) 배열의 평균
- 자연수 a, b를 입력
- a행 b열의 숫자를 입력
- 가로 평균, 세로 평균, 전체 평균을 소수 둘째 자리까지 출력.
a,b=map(int,input().split())
col_avg=[[] for _ in range(a)]
row_avg=[[] for _ in range(b)]
total_avg=0
arr=[list(map(int,input().split())) for _ in range(a)]
for i in range(a):
for j in range(b):
col_avg[i].append(arr[i][j])
row_avg[j].append(arr[i][j])
for i in range(a):
print(f'{sum(col_avg[i])/b:.2f}',end=' ')
print()
for i in range(b):
print(f'{sum(row_avg[i])/a:.2f}',end=' ')
print()
for i in range(a):
total_avg+=sum(arr[i])
print(f'{total_avg/(a*b):.2f}')
- col_avg : 길이가 a이며 각각의 원소가 빈 리스트인 2차원 리스트
- col_avg [i]는 arr의 i+1행의 모든 원소들의 리스트
- row_avg : 길이가 b이며 각각의 원소가 빈 리스트인 2차원 리스트
- row_avg [j]는 arr의 j+1열의 모든 원소들의 리스트
- arr [i][j]를 col_avg [i], row_avg [j]에 삽입
- col_avg와 row_avg는 각 원소가 리스트이므로 순환하여 원소의 합을 구한 후
- sum(col_avg [i])은 b로 나누고, sum(row_avg [j])은 a로 나눈다.
- 전체 평균값은 arr의 각 숫자들을 모두 더한 후 a*b만큼 나눠준다.
Q) 계단 모양 출력
- 자연수 n 입력. nXn 크기의 정수를 입력
- 위의 이미지처럼 n=3, n=4일 때 각각 색칠된 칸의 수들의 합을 구한다.
n=int(input())
arr=[list(map(int,input().split())) for _ in range(n)]
sum_val=0
for i in range(n):
for j in range(n-1-i,n):
sum_val+=arr[i][j]
print(sum_val)
- 1행은 색칠된 곳이 arr [0][n-1].
- 2행은 색칠된 곳이 arr [1][n-1-1], arr [1][n-1]
- 3행은 색칠된 곳이 arr [2][n-1-2], arr [2][n-1-1], arr [2][n-1]
- k행은 색칠된 곳이 arr [k][n-1-k], arr [k][n-1-(k-1)],... , arr [k][n-1]
- 각 행의 색칠된 곳을 모두 더해서 출력
결과
>> 4
>> 1 2 3 4
>> 5 6 7 8
>> 9 10 11 12
>> 13 14 15 16
110
'파이썬(Python)' 카테고리의 다른 글
2차원 배열 활용 2 (0) | 2022.11.03 |
---|---|
2차원 배열 활용 (0) | 2022.10.28 |
리스트 최대 최소 2 (0) | 2022.10.25 |
리스트 최대, 최소 (0) | 2022.10.23 |
리스트 탐색 (0) | 2022.10.22 |