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

상하좌우 SHIFT 알고리즘

Jedy_Kim 2021. 5. 14. 17:51
728x90

문제

N x M 크기의 2차원 배열이 있다. 이 배열의 가장 왼쪽 위 칸은 (0, 0)으로, 가장 오른쪽 아래 칸은 (N-1, M-1)로 표현한다.

배열의 크기 N, M,과 배열의 값들, y, x, d, r 이 주어질 때, 이 배열의 (y, x) 위치에서 d 방향으로 r 만큼 이동한 위치의 값을 출력하는 프로그램을 작성하여라.

d 가 0 이면 오른쪽, 1 이면 왼쪽, 2 면 아래, 3 이면 위를 의미한다. 처음 위치와 도착 위치 모두 배열 안에 있음이 보장된다.

입력

첫 번째 줄에 배열의 크기 N, M 이 주어진다.

두 번째 줄부터 N 개의 줄에 걸쳐 배열의 값들이 주어진다. 각 줄마다 M 개씩 숫자가 존재한다. 각 숫자는 10을 넘지 않는 자연수다.

마지막 줄에 y, x, d, r 이 주어진다.

(3 ≤ N, M ≤ 100, 1 ≤ y ≤ N - 1, 1 ≤ x ≤ M - 1, 0 ≤ d < 4)

(if d: 0, 1 → 0 ≤ y ± r < N, if d: 2, 3 → 0 ≤ x ± r < M)

출력

첫 줄에 문제에서 구해야하는 위치의 배열 값을 출력한다.

입력의 예 1

4 5

2 3 1 5 4

1 3 5 4 2

1 8 3 6 1

8 9 7 2 4

2 1 0 2

출력의 예 1

6

입력의 예 2

4 5

2 3 1 5 4

1 3 5 4 2

1 8 3 6 1

8 9 7 2 4

3 1 3 3

출력의 예 2

3

입력의 예 3

4 5

2 3 1 5 4

1 3 5 4 2

1 8 3 6 1

8 9 7 2 4

0 4 2 2

출력의 예 3

1

입력의 예 4

4 5

2 3 1 5 4

1 3 5 4 2

1 8 3 6 1

8 9 7 2 4

2 2 1 1

출력의 예 4

8

설명

입력의 예 1 번의 경우 (2, 1) 위치에 있는 8 이 출발지점이다. d 가 0, r 이 2 이므로 오른쪽으로 2 칸 이동한 (2, 3) 위치로 이동하게 돼서 정답은 6 이다.

 

#문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
frameInfo = list(map(int, input().split()))
row = frameInfo[0]
col = frameInfo[1]
frame = [list(map(int, input().split())) for _ in range(row)]  
directionInfo = list(map(int, input().split()))
 
 
 
# 0: 오른쪽, 1: 왼쪽, 2: 아래, 3: 위
= [1-100]
= [0-01-1]
 
xPos = directionInfo[1
yPos = directionInfo[0]
 
for i in range(directionInfo[3]):
  xPos += x[directionInfo[2]]
  yPos += y[directionInfo[2]]
  
print(frame[yPos][xPos])
cs

 

반응형

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

경계 처리 알고리즘  (0) 2021.05.15
장애물 처리 알고리즘  (0) 2021.05.15
회전 알고리즘  (0) 2021.05.14
역방향  (0) 2021.05.14
방향 회전 알고리즘  (0) 2021.05.14