본문 바로가기
Python/파이썬 문법 Tips

[ 파이썬(python) ] n * n 행렬에서 target * target 크기만큼 자르기

by YWTechIT 2021. 5. 20.
728x90

📍 n * n 행렬에서 target * target 크기만큼 자르기

가로세로가 동일한 n*n 행렬에서 n보다 작은 target*target 행렬만큼 잘라 출력하고 싶을 때는 다음과 같이 작성하자. 예를 들어, n = 5, target = 3일때는 다음과 같은 과정을 거친다.

 

  1. arr행렬을 초기화해준다. 출력 값이 제대로 나오는지 확인하기 위해 arr은 1부터 차례대로 증가하는 행렬로 초기화한다.
  2. 범위를 n으로 하는 이중 반복문을 선언한다. 이때 index오류를 방지하기 위해 ntarget-1로 빼준다. -1을 빼주지 않으면 제일 마지막 행과 열은 계산하지 않으니까 꼭 빼주도록 하자.
  3. 이중 반복문안에 이중 반복문을 한번 더 선언한다. 가독성을 위해 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
반응형

댓글