[백준] PS/Java [실랜디]

[백준 2828] 사과 담기 게임 - JAVA

SH3542 2025. 3. 14. 21:51

https://www.acmicpc.net/problem/2828

 

사과가 바구니 기준 왼쪽에 있을 때, 오른쪽에 있을 때로 나누어 구현한다.

이동은 그리디로, 최소 거리 만큼만 이동한다 (바구니의 모서리가 사과에 닿는 최초 거리)

사과는 항상 스크린 안에서 떨어지므로 경계체크는 하지 않아도 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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 ans = 0;
    int l = 1;
    int r = l + M - 1;

    int A = Integer.parseInt(br.readLine());
    for (int i = 0; i < A; i++) {
      int a = Integer.parseInt(br.readLine());

      if (a >= l && a <= r) {
        continue;
      }

      if (a > r) {
        int move = a - r;
        ans += move;
        l += move;
      } else {
        int move = l - a;
        ans += move;
        l -= move;
      }
      r = l + M - 1;
    }

    System.out.println(ans);
  }
}