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

밀기 알고리즘 2

Jedy_Kim 2021. 6. 13. 17:54
728x90

문제

세로 길이 N, 가로 길이 M 인 2차원 배열과 두 정수 u, d 가 주어진다.

이 배열의 0 번 부터 u 번 까지의 행은 테두리가 시계방향으로 한 칸 씩 밀리고, d 번 부터 n - 1 번 까지의 행은 테두리가 반시계방향으로 한 칸 씩 밀린 배열을 출력하여라. 여기서 테두리란 해당 범위의 상하좌우 끝 줄을 의미한다.

입력

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

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

마지막 줄에 u, d 가 주어진다.

(4 ≤ N, M ≤ 100, 1 ≤ 수열을 구성하는 수 ≤ N x M, 0 < u < d < N - 1)

출력

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

입력의 예 1

5 5

2 3 1 1 4

1 3 2 3 4

1 2 7 3 7

3 2 1 4 2

1 4 5 5 1

1 2

출력의 예 1

1 2 3 1 1

3 2 3 4 4

2 7 3 7 2

1 2 1 4 1

3 1 4 5 5

입력의 예 2

5 5

1 3 4 2 4

1 2 5 8 7

6 4 5 2 7

3 4 2 8 9

9 8 7 4 5

1 3

출력의 예 2

1 1 3 4 2

2 5 8 7 4

6 4 5 2 7

4 2 8 9 5

3 9 8 7 4

입력의 예 3

4 4

1 2 4 2

3 4 1 7

8 3 1 6

9 8 9 7

1 2

출력의 예 3

3 1 2 4

4 1 7 2

3 1 6 7

8 9 8 9

입력의 예 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

2 4

출력의 예 4

2 7 1 3 5

2 3 4 8 4

1 4 7 9 3

9 8 5 3 1

3 6 7 4 5

2 1 4 3 2

 

#코드

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import sys
 
# 세로 길이 N, 가로 길이 M 인 2차원 배열과 두 정수 u, d 가 주어진다.
# 이 배열의 0 번 부터 u 번 까지의 행은 테두리가 시계방향으로 한 칸 씩 밀리고,
# d 번 부터 n - 1 번 까지의 행은 테두리가 반시계방향으로 한 칸 씩 밀린 배열을 출력
 
def doit():
  global getArr
  # ************** 첫 번째 시계 방향 밀기 **************
  temp = getArr[0][0]
  # 좌측 세로
  for i in range(u):
    getArr[i][0= getArr[i+1][0]
  # 하단
  for i in range(m-1):
    getArr[u][i] = getArr[u][i+1]
  # 우측 세로
  for i in range(u, 0-1):
    getArr[i][m-1= getArr[i-1][m-1]
  # 상단
  for i in range(m-10-1):
    getArr[0][i] = getArr[0][i-1]
  getArr[0][1= temp
  
  # ************** 두 번째 반시계 방향 밀기 **************
  # d ~ (n-1) : 2 ~ 4
  temp = getArr[d][0
 
  # 상단
  for i in range(m-1):
    getArr[d][i] = getArr[d][i+1]
  
  # 우측 세로
  for i in range(d, n-1):
    getArr[i][m-1= getArr[i+1][m-1]
 
  # 하단
  for i in range(m-10-1):
    getArr[n-1][i] = getArr[n-1][i-1]
  
  # 좌측 세로    
  for i in range(n-1, d, -1):
    getArr[i][0= getArr[i-1][0]
  
  getArr[d+1][0= temp  
 
  for i in getArr:
    for j in i:
      print(j, end=' ')
    print()    
  
  
 
if __name__ == "__main__":
  input = sys.stdin.readline
  
  n, m   = map(int, input().split())
  getArr = [list(map(int, input().split())) for _ in range(n)]
  u, d   = map(int, input().split())
  doit()
cs

 

반응형

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

공기 청정기  (0) 2021.06.14
확산 알고리즘  (0) 2021.06.13
N칸 확산  (0) 2021.06.13
2차원 확산  (0) 2021.06.12
1차원 확산  (0) 2021.06.12