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);

    }
}

풀이

사이클을 도는 부분을 패턴으로 이해하고 해당 요청에 패턴에 몇 번째에 매칭되는지 찾으면 된다! 그냥 몇 가지를 손으로 써보며 공식을 찾으면 된다.