CS/알고리즘_문제풀이(파이썬)

2차원 밀기

Jedy_Kim 2021. 6. 12. 13:51
728x90

문제

세로 길이 N, 가로 길이 M 인 2차원 배열이 주어진다.

이 배열의 테두리가 시계방향으로 한 칸 씩 밀린 배열을 출력하여라.

여기서 테두리란 배열의 상하좌우 끝 줄을 의미한다.

입력

첫 줄에 N, M 이 주어진다.

두 번째 줄부터 N 줄에 걸쳐 각 줄에 M 개씩 배열의 수가 주어진다.

(3 ≤ N, M ≤ 100, 1 ≤ 수열을 구성하는 수 ≤ N x M)

출력

밀기가 끝난 배열을 출력한다.

입력의 예 1

3 5

2 3 1 1 4

1 3 2 3 4

1 2 7 3 7

출력의 예 1

1 2 3 1 1

1 3 2 3 4

2 7 3 7 4

입력의 예 2

4 4

1 2 4 2

3 4 1 7

8 3 1 6

9 8 9 7

출력의 예 2

3 1 2 4

8 4 1 2

9 3 1 7

8 9 7 6

입력의 예 3

3 5

1 3 4 2 4

1 2 5 8 7

6 4 5 2 7

출력의 예 3

1 1 3 4 2

6 2 5 8 4

4 5 2 7 7

입력의 예 4

6 5

7 1 3 5 4

2 3 4 8 3

2 1 4 7 9

9 8 5 3 1

2 3 6 7 4

1 4 3 2 5

출력의 예 4

2 7 1 3 5

2 3 4 8 4

9 1 4 7 3

2 8 5 3 9

1 3 6 7 1

4 3 2 5 4

 

#코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
 
# 세로 길이 N, 가로 길이 M 인 2차원 배열이 주어진다.
# 이 배열의 테두리가 시계방향으로 한 칸 씩 밀린 배열을 출력
# 여기서 테두리란 배열의 상하좌우 끝 줄을 의미
 
def rotate():
  global arr
  temp = arr[0][0]
  
  # 좌측 세로(행) : 위로
  for i in range(n-1):
    arr[i][0= arr[i+1][0]
  # 하단 가로(열) : 좌측 옆으로
  for i in range(m-1):
    arr[n-1][i] = arr[n-1][i+1]
  # 우측 세로(행) : 아래로
  for i in range(n-10-1):
    arr[i][m-1= arr[i-1][m-1]
  # 상단 가로(열) : 우측 옆으로
  for i in range(m-10-1):
    arr[0][i] = arr[0][i-1]
  
  arr[0][1= temp
  
  for i in arr:
    for j in i:
      print(j, end=' ')
    print()
 
if __name__ == "__main__":
  input = sys.stdin.readline
  n, m  = map(int, input().split())
  arr   = [ list(map(int, input().split())) for _ in range(n)]
  
  rotate()
  
  
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

2차원 확산  (0) 2021.06.12
1차원 확산  (0) 2021.06.12
CHEEZE  (0) 2021.06.11
최단거리  (0) 2021.06.07
2색칠하기(DFS/BFS)  (0) 2021.06.06