PS
백준 2828. 사과 담기 게임
tose33
2021. 8. 15. 12:03
https://www.acmicpc.net/problem/2828
2828번: 사과 담기 게임
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<n) 플레이어는="" 게임을="" 하는="" 중에="" 바구니를="" <="" p=""> </n)>
www.acmicpc.net
현재 바구니의 위치를 사과가 떨어지는 순서대로의 위치로 옮기면된다.
이때 최소의 횟수로 이동해야하므로
사과의 위치가 현재 바구니의 오른쪽 끝지점보다 오른쪽에 있으면, 오른쪽 끝 지점이 사과의 위치에 오도록 이동.
사과의 위치가 현재 바구니의 왼쪽 끝지점보다 왼쪽에 있으면, 왼쪽 끝 지점이 사과의 위치에 오도록 이동.
#include <iostream>
using namespace std;
int n,m,j;
int loc[30];
int main()
{
cin >> n >> m >> j;
for(int i = 1; i <= j; i++)
cin >> loc[i];
int left = 1;
int right = m;
int cnt = 0;
for(int i = 1; i <= j; i++)
{
// 바구니가 사과를 얻을수 있는 위치에 없다
if(!(loc[i] >= left && loc[i] <= right))
{
// 바구니가 사과가 떨어지는 위치의 왼쪽에 있다
if(right < loc[i])
{
int move = loc[i] - right;
cnt += move;
left += move;
right += move;
}
// 바구니가 사과가 떨어지는 위치의 오른쪽에 있다
else if(loc[i] < left)
{
int move = left - loc[i];
cnt += move;
left -= move;
right -= move;
}
}
}
cout << cnt;
}