문제 링크입니다: https://www.acmicpc.net/problem/17827
17827번: 달팽이 리스트
첫째 줄에 노드의 개수 N(2 ≤ N ≤ 200,000), 질문의 횟수 M(1 ≤ M ≤ 200,000), N번 노드가 가리키는 노드의 번호 V(2 ≤ V ≤ N)가 공백으로 구분되어 주어진다. 둘째 줄에 N개의 정수 C1, C2, …, CN이 공백으로 구분되어 주어진다. 이때 Ci는 i번 노드에 저장된 값을 뜻한다. (1 ≤ Ci ≤ 1,000,000) 셋째 줄부터 M개의 줄에 걸쳐 각 질문에 해당하는 K(1 ≤ K ≤ 109)가 주어진다.
www.acmicpc.net
배열의 크기가 최대 200,000이고 쿼리 개수가 최대 1,000,000,000개이기 때문에 브루트포스로는 접근할 수 없는 문제였습니다.
따라서 모듈러 연산을 통해 문제를 풀어야했습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
const int MAX = 200000 + 1; | |
int N, M, V; | |
int arr[MAX]; | |
int main(void) | |
{ | |
ios_base::sync_with_stdio(0); | |
cin.tie(0); | |
cin >> N >> M >> V; | |
for (int i = 0; i < N; i++) | |
{ | |
cin >> arr[i]; | |
} | |
int head = --V; | |
int tempLength = N - head; | |
for (int i = 0; i < M; i++) | |
{ | |
int K; | |
cin >> K; | |
if (K < head) | |
{ | |
cout << arr[K] << "\n"; | |
} | |
else | |
{ | |
cout << arr[(K - head) % tempLength + head] << "\n"; | |
} | |
} | |
return 0; | |
} |


개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 17829번 222-풀링 (0) | 2019.11.04 |
---|---|
백준 17828번 문자열 화폐 (0) | 2019.11.04 |
백준 17826번 나의 학점은? (0) | 2019.11.04 |
백준 17836번 공주님을 구해라! (2) | 2019.11.04 |
백준 1799번 비숍 (4) | 2019.10.22 |