728x90
문제
길이가 n인 수열이 있다.
총 q번의 질문에 대한 답을 하는 프로그램을 작성하여라.
각 질문은 두 정수 d, y로 주어지는데 이전에 출력한 수의 위치를 x라고 할 때, d가 1인 경우 x번 인덱스의 y 칸 앞의 수를, d가 2인 경우 x번 인덱스의 y칸 뒤의 수를 출력해야 한다. 프로그램 시작 시 초기 x는 0이다.
단, 이 수열의 끝은 처음과 연결되어있고, 인덱스는 0번부터 시작한다. 0 번 인덱스 1 칸 앞은 n-1 번 인덱스이고, n-1 번 인덱스 1 칸 다음은 0번 인덱스이다.
입력
첫 번째 줄에 수열의 길이 n 과 질문의 수 q 가 주어진다.
두 번째 줄에 수열을 구성하는 수 ai 가 n 개가 주어진다. 같은 수의 ai 는 존재하지 않는다.
세 번째 줄부터 q + 2 줄까지 각 줄마다 d, y 가 주어진다.
(3 ≤ n, q ≤ 100, 1 ≤ ai ≤ n, d: 1 or 2, 1 ≤ y ≤ 100)
출력
q 개의 질문 각각에 대한 위치 값을 한 줄에 하나씩 출력한다.
입력의 예 1
5 3
2 3 1 5 4
1 4
2 2
1 14
출력의 예 1
4
1
3
입력의 예 2
7 3
5 3 2 4 7 6 1
1 5
1 13
2 19
출력의 예 2
6
7
1
입력의 예 3
10 4
9 5 1 3 4 2 6 7 10 8
2 6
2 17
1 26
2 13
출력의 예 3
4
7
3
9
#코드
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
|
getFirst = list(map(int, input().split()))
getSecond = list(map(int, input().split()))
getThird = list()
n = getFirst[0]
q = getFirst[1]
for i in range(q):
getThird.append( list(map(int, input().split())) )
x = 0
for i in range(q):
d = getThird[i][0] # 1 - 정방향, 2 - 역방향
y = getThird[i][1] # 이동칸
if d == 1:
for j in range(y):
if x >= n-1: x = 0
else: x += 1
elif d == 2:
for j in range(y):
if x <= 0: x = n-1
else: x -= 1
print(getSecond[x])
|
cs |
반응형
'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글
장애물 처리 알고리즘 (0) | 2021.05.15 |
---|---|
상하좌우 SHIFT 알고리즘 (0) | 2021.05.14 |
역방향 (0) | 2021.05.14 |
방향 회전 알고리즘 (0) | 2021.05.14 |
streetree (0) | 2021.05.13 |