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

이동 알고리즘

Jedy_Kim 2021. 5. 15. 16:15
728x90

문제


N × M 크기의 2차원 배열이 있다.

이 배열의 가장 왼쪽 위 칸은 (0, 0)으로, 가장 오른쪽 아래 칸은 (N-1, M-1)로 표현한다. 총 q번의 질문에 대한 답을 하는 프로그램을 작성하여라.

각 질문은 두 정수 d, r 로 주어지는데, 이전 출력 위치를 (y, x)라고 할 때, 이 배열의 (y, x) 위치에서 d방향으로 r 만큼 이동한 위치의 값을 출력해야 한다.

d 가 0 이면 오른쪽, 1 이면 왼쪽, 2 면 아래, 3 이면 위를 의미한다.

이동 과정에서 -1 을 만나거나 배열의 범위 밖으로 나가려고 할 경우, 그 이전 자리에서 멈춘다.

프로그램 시작 시 초기 y, x 는 모두 0 이다.

입력


첫 번째 줄에 배열의 크기 N, M 과 질문의 수 q 가 주어진다.

두 번째 줄부터 N 개의 줄에 걸쳐 배열의 정보가 주어진다. 각 줄에는 M 개의 숫자가 주어진다.

바로 다음 줄부터 q 개의 줄에 걸쳐 질문 정보가 주어진다. 각 줄에는 d, r 이 주어진다.

(3 ≤ N, M ≤ 100, 1 ≤ q ≤ 100, 0 ≤ d < 4, 1 ≤ r ≤ max(N, M))

출력


q 개의 줄에 걸쳐 문제에서 구하고자하는 값을 출력한다.

입력의 예 1

4 5 3

2 -1 1 5 4

1 5 5 4 2

1 8 3 -1 1

8 9 7 2 4

2 2

0 4

3 4

출력의 예 1

1

3

1

입력의 예 2

4 5 3

2 -1 1 5 4

1 5 5 4 2

-1 8 3 -1 1

8 9 7 2 4

2 2

0 4

3 4

출력의 예 2

1

2

4

입력의 예 3

4 5 2

2 3 1 5 4

1 3 5 4 2

1 8 3 6 1

8 9 7 2 4

0 4

1 2

출력의 예 3 

4

1

입력의 예 4

4 5 3

2 3 1 5 4

1 3 5 4 2

1 8 3 -1 1

8 9 7 2 4

2 2

1 1

0 3

출력의 예 4 

1

1

3

설명


입력의 예 1 번 상황의 그림이다.

#코드

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
getInfo = list(map(int, input().split()))
= getInfo[2]
getFrameInfo = [list(map(int, input().split())) for _ in range(getInfo[0])]
getPosInfo = list()
 
frame = [[-1 for _ in range(getInfo[1+ 2)] for _ in range(getInfo[0+ 2)]
for i in range(q):
  getPosInfo.append(list(map(int, input().split())))
 
 # 0: 오, 1 : 왼, 2 : 하, 3 : 상
= [001-1]
= [1-100]
 
for i in range(len(getFrameInfo)):
  for j in range(len(getFrameInfo[i])):
    frame[i+1][j+1= getFrameInfo[i][j]
  
xPos = 1
yPos = 1
 
## 로직
 
for i in range(q):
  d = getPosInfo[i][0]
  r = getPosInfo[i][1]
  for j in range(r):
    if frame[yPos+y[d]][xPos+x[d]] == -1:
      break
    yPos += y[d]  
    xPos += x[d]
  print(frame[yPos][xPos])
cs

 

반응형

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

회전판과 로봇 (robot.cpp)  (0) 2021.05.16
baseball game  (0) 2021.05.16
경계 처리 알고리즘  (0) 2021.05.15
장애물 처리 알고리즘  (0) 2021.05.15
상하좌우 SHIFT 알고리즘  (0) 2021.05.14