728x90
📍 n * n
행렬에서 target * target
크기만큼 자르기
가로세로가 동일한 n*n
행렬에서 n
보다 작은 target*target
행렬만큼 잘라 출력하고 싶을 때는 다음과 같이 작성하자. 예를 들어, n = 5
, target = 3
일때는 다음과 같은 과정을 거친다.
arr
행렬을 초기화해준다. 출력 값이 제대로 나오는지 확인하기 위해arr
은 1부터 차례대로 증가하는 행렬로 초기화한다.- 범위를
n
으로 하는 이중 반복문을 선언한다. 이때index
오류를 방지하기 위해n
을target-1
로 빼준다.-1
을 빼주지 않으면 제일 마지막 행과 열은 계산하지 않으니까 꼭 빼주도록 하자. - 이중 반복문안에 이중 반복문을 한번 더 선언한다. 가독성을 위해
each_case
라는 함수를 선언했는데, 중요한 점은 출력하려는 좌표에i+a, j+b
를 해줘야 모든 좌표를 출력할 수 있다.
n = 5
target = 3
arr = [[0] * n for _ in range(n)]
cnt = 0
# use def function
def each_case(a, b): # target * target 행렬 출력
for i in range(target):
for j in range(target):
print(arr[i+a][j+b], end=' ')
print()
print()
for i in range(n): # arr 행렬 초기화
for j in range(n):
cnt += 1
arr[i][j] = cnt
for i in range(n-(target-1)): # n * n 행렬 안에서 each_case 함수 실행
for j in range(n-(target-1)):
each_case(i, j)
# not use def function
for i in range(n):
for j in range(n):
cnt += 1
arr[i][j] = cnt
for i in range(n-(target-1)):
for j in range(n-(target-1)):
for k in range(target):
for l in range(target):
print(arr[k + i][l + j], end=' ')
print()
print()
👉🏽 출력은 동일
1 2 3
6 7 8
11 12 13
2 3 4
7 8 9
12 13 14
3 4 5
8 9 10
13 14 15
6 7 8
11 12 13
16 17 18
7 8 9
12 13 14
17 18 19
8 9 10
13 14 15
18 19 20
11 12 13
16 17 18
21 22 23
12 13 14
17 18 19
22 23 24
13 14 15
18 19 20
23 24 25
반응형
'Python > 파이썬 문법 Tips' 카테고리의 다른 글
[ 파이썬(Python) ] 2차원 행렬에서 세로로 최대값, 최소값 갱신하기 (0) | 2021.05.27 |
---|---|
[ 파이썬(python) ] 범위가 큰 2차원 배열 / 문자열을 출력 할 때 (0) | 2021.05.27 |
[ 파이썬(python) ] 이중 반복문에서 print의 위치 별 출력 (0) | 2021.05.19 |
[ 파이썬(python) ] cnt 유용하게 사용하기 (0) | 2021.05.18 |
[ 파이썬(python) ] 리스트, 문자열 거꾸로 출력하기 (0) | 2021.05.12 |
댓글