관리 메뉴

기억을 위한 기록들

[백준 2828: 사과 담기 게임] - C++ 본문

Coding Test - cpp/Greedy

[백준 2828: 사과 담기 게임] - C++

에드윈H 2021. 1. 29. 10:39

www.acmicpc.net/problem/2828

 

2828번: 사과 담기 게임

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

www.acmicpc.net

#include<iostream>
#include<string.h>
using namespace std;
int main(){

	int screenSize;
	int basketSize;
	int appleNum;

	cin >> screenSize;
	cin >> basketSize;

	cin >> appleNum;

	int arr[20];

	memset(arr, -1, sizeof(arr));
	int n;

	//사과 떨어지는 위치 순서 저장
	for (int i = 0; i < appleNum; i++)
	{
		cin >> n;
		arr[i] = n;
	}

	//처음 바구니의 자치하는 정도 
	int left = 1;
	int right = basketSize;

	int moveCost = 0;
	for (int i = 0; i < appleNum; i++)
	{
		int curDrop = arr[i]; //현재 떨어지는 위치
		int curCost = 0; //현재 움직이는 비용
		
		if (right < curDrop) //떨어지는 위치가 바구니보다 오른쪽일때
		{
			curCost = curDrop - right;

			moveCost += curCost;

			left += curCost;
			right += curCost;
		}
		else if (curDrop < left ) {  //떨어지는 위치가 바구니보다 왼쪽일때
			curCost = left - curDrop;

			moveCost += curCost;

			left -= curCost;
			right -= curCost;
		}
		else {  //떨어지는 위치가 바로 받을수 있는 위치
			moveCost += 0;
		}
	}

	cout << moveCost << endl;

	return 0;
}