Koala - 13기/기초 알고리즘 스터디

[BOJ/java] 2828번 사과담기게임

msms0324 2024. 2. 14. 15:45

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

 

2828번: 사과 담기 게임

상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를

www.acmicpc.net

 

바구니가 포함한 인덱스를 벗어난 숫자에 사과가 떨어질경우를 생각해보았다.

만약 바구니가 가르키는 가장 끝 인덱스보다 큰 숫자가 들어온다면 바구니의 가장 끝 인덱스는 그 큰 숫자가 될 것이고,

바구니가 가르키는 가장 작은 인덱스보다 작은 숫자가 들어온다면 바구니의 가장 처음 인덱스는 그 작은 숫자가 될것이다.

그리고 인덱스가 변한 만큼 count해 주면 될것이다.

 

import java.io.*;
import java.math.BigInteger;
import java.util.StringTokenizer;

import static java.lang.Integer.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st= new StringTokenizer(br.readLine()," ");
        int N= Integer.parseInt(st.nextToken());
        int M= Integer.parseInt(st.nextToken());

        int start=1;
        int end=M;
        int count=0;

        int q=Integer.parseInt(br.readLine());

        for(int i=0;i<q;i++){
            int landing=Integer.parseInt(br.readLine());
            if(landing>end){
                count+=landing-end;



                start+=landing-end;

                end=landing;




            }

            if(landing<start){
                count+=start-landing;

                end-=start-landing;
                start=landing;


            }





        }

        bw.write(String.valueOf(count));



        br.close();
        bw.flush();
        bw.close();



    }

}