문제
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: 위
x = [1, -1, 0, 0]
y = [0, -0, 1, -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 |