본문 바로가기
알고리즘 & 자료구조/백준

백준 2828

by 신재권 2022. 2. 18.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main2828 {


	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		// 1. 바구니 안에 떨어짐
		// 2. target ~~~~ 바구니 인상태 
		// 3. 바구니 ~~~~ target 인상태 
		
		int N = Integer.parseInt(st.nextToken()); //스크린 N 칸 
		int M = Integer.parseInt(st.nextToken()); //스크린을 차지하는 바구니의 크기 M칸 
		int J = Integer.parseInt(br.readLine()); //사과가 떨어지는 개수 J개
		
		int cur = 1; //현재 위치 
		int r = 0; //바구니 범위
		int tmp = 0;
		int ans = 0;
		for(int i=0; i<J; i++) {
			r = cur + M - 1; 
			tmp = Integer.parseInt(br.readLine()); //사과의 위치 
			if(tmp >= cur && tmp <=r) continue; //사과가 떨어지는 위치가 이동을 안해도 바구니에 들어갈 시 
			else {
				if(tmp < cur) { // 바구니의 위치가 tmp보다 앞에 있으면  (tmp,....,바구니)
					ans += (cur - tmp); //현재위치 ->사과의 위치 까지 이동 
					cur = tmp; //사과를 받은 위치가 현재위치가 된다.
				}else { //바구니의 위치가 tmp보다 뒤에 있으면 (바구니,....,tmp) 
					cur += (tmp - r); // 사과의위치 - 바구니범위 = 사과를 받으러 이동하는 거리
					ans += (tmp - r);
				}
			}
		}
		System.out.println(ans);
		
		
	}
	
	
	
	
	
}

 

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 4659  (0) 2022.02.20
백준 2910  (0) 2022.02.19
백준 1992  (0) 2022.02.17
백준 2583  (0) 2022.02.16
백준 2468  (0) 2022.02.14