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

회전 알고리즘

Jedy_Kim 2021. 5. 14. 15:27
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()
= getFirst[0]
= getFirst[1]
for i in range(q):
  getThird.append( list(map(int, input().split())) )
 
= 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