728x90
문제
세로 길이 N, 가로 길이 M 인 2차원 배열에 k 명의 사람이 있다. i 번 사람은 1 초에 di 방향으로 fi 만큼 이동하고, 만약 이동하려는 위치가 배열의 범위 밖이라면 배열을 나가기 직전의 위치에서 멈춘다. t 초 후 각 사람의 위치를 1 번 사람부터 출력하여라.
이 배열의 왼쪽 위 좌표는 (1, 1) 이고, 오른쪽 아래 좌표는 (M, N) 이다. yi 는 i 번 사람의 세로 방향 위치, xi 는 i 번 사람의 가로 방향 위치를 의미한다. di 는 0, 1, 2, 3 중 하나로 주어지는데, 순서대로 상하좌우를 의미한다.
입력
첫 줄에 정수 N, M, k, t 가 주어진다.
두 번째 줄부터 k 줄에 걸쳐 정수 yi, xi, di, fi 가 주어진다.
(3 ≤ N, M, k, t ≤ 100, 1 ≤ yi ≤ N, 1 ≤ xi ≤ M, 0 ≤ di ≤ 3, 1 ≤ fi ≤ 100)
출력
k 줄에 걸쳐 각 사람의 t 초 후 위치를 y, x 순으로 출력한다.
입력의 예 1
4 5 3 2
1 1 3 1
2 2 1 2
3 5 2 3
출력의 예 1
1 3
4 2
3 1
입력의 예 2
9 11 3 4
4 2 2 20
5 3 1 15
8 5 3 2
출력의 예 2
4 1
9 3
8 11
입력의 예 3
25 31 3 2
4 2 2 20
5 3 1 15
8 5 3 2
출력의 예 3
4 1
25 3
8 9
입력의 예 4
25 31 3 6
4 2 2 20
5 3 1 15
8 5 3 2
출력의 예 4
4 1
25 3
8 17
설명
아래는 입출력의 예 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 | import sys # i 번 사람은 1 초에 di 방향으로 fi 만큼 이동하고 # 만약 이동하려는 위치가 배열의 범위 밖이라면 배열을 나가기 직전의 위치에서 멈춘다. # t 초 후 각 사람의 위치를 1 번 사람부터 출력하여라. def move(row, col, direct, move_cnt): global t # 상, 하, 좌, 우 dy = [-1, 1, 0, 0] dx = [0, 0, -1, 1] for _ in range(t): for _ in range(move_cnt): ny = row + dy[direct] nx = col + dx[direct] if 0<ny<(n+1) and 0<nx<(m+1): row = ny col = nx print(row, col) if __name__ == "__main__": input = sys.stdin.readline n, m, k, t = map(int, input().split()) for i in range(k): y, x, d, f = list(map(int, input().split())) move(y, x, d, f) | cs |
반응형
'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글
2차원 큰 이동 (0) | 2021.06.18 |
---|---|
1차원 큰 이동 (0) | 2021.06.18 |
ICEBERG[백준 2573] (0) | 2021.06.16 |
SLIKAR (0) | 2021.06.16 |
TOMATO[백준 7569] (0) | 2021.06.16 |