Algorithm
[Algo] 백준 17827 달팽이 리스트 JAVA
조핑구
2024. 5. 8. 13:37
문제 바로가기 : https://www.acmicpc.net/problem/17827
메모리 : 48744KB
시간 : 616ms
언어 : Java 11
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
int[] arr = new int[N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
int num = Integer.parseInt(br.readLine()) + 1;
if (num <= N) {
sb.append(arr[num]).append("\n");
} else {
// 달팽이집으로 들어가기
int tmp = (num - (V - 1)) % (N - (V - 1));
// System.out.println("tmp" + (num - (V - 1)) % (N - (V - 1)));
if (tmp == 0) {
sb.append(arr[N]).append("\n");
} else {
sb.append(arr[tmp + (V - 1)]).append("\n");
}
}
}
System.out.print(sb);
}
}
사이클을 도는 부분을 패턴으로 이해하고 해당 요청에 패턴에 몇 번째에 매칭되는지 찾으면 된다! 그냥 몇 가지를 손으로 써보며 공식을 찾으면 된다.