현제의 현재이야기
[백준/python] 17827 - 달팽이리스트 본문
import sys
from collections import deque
input = sys.stdin.readline
n, m, v = map(int, input().split()) # n: 노드개수 m: 질문 횟수 v: 가르키는 노드
a = list(map(int, input().split()))
cut_a = a[:]
cut_a = deque(cut_a)
result = []
for _ in range(v - 1):
cut_a.popleft()
for _ in range(m):
question = int(input())
if question < n:
result.append(a[question])
else:
question -= v - 1
question = question % len(cut_a)
result.append(cut_a[question])
for answer in result:
print(answer)
| 알고리즘
- 저장 된 값 a를 받고 cut_a에 복사
- cut_a에는 순환하는, 즉 달팽이의 껍질 부분만을 담을 거임
- 따라서 순환되지 않은 부분을 없애기 위해 popleft를 v - 1번 시행해줌. # v - 1 번인 이유는 v번째 부터 껍질이 시작하기 때문에
- 만약에 들어오는 질문이 n보다 작으면 기존의 a에서 저장된 값을 result에 저장
- 만약에 들어노는 질문이 n보다 크면 질문에 v - 1를 해줌 #달팽이의 몸통부분을 잘라준다
- 그리고 잘린 질문을 % cut_a를 해줌으로써 cut_a를 넘지 않게 함
예:
A = [13 2 5 11 7 8 2 4 9 10] v = 3 cut _ a = [5, 11, 7, 8, 2, 4, 9, 10]
question = 10이 들어오면 노드 개수 10보다 크거나 같음으로 else로 들어가서
10 – (3 – 1) = 8 8 = 8 % 8 = 0 Cut_a[0]참조해서 5이다.
'algorithm' 카테고리의 다른 글
[백준/python] 17952 - 과제는 끝나지 않아 (0) | 2022.06.25 |
---|---|
[백준/python] 2346 -풍선터뜨리기 (0) | 2022.06.25 |
[백준/python] 11866 - 요세푸스 문제 (0) | 2022.06.25 |
[백준/python] 1021 - 회전하는 큐 (0) | 2022.06.25 |
[백준/python] 11501 - 주식 다국어 (0) | 2022.06.25 |
Comments