[백준 c++] 2828 사과 담기 게임

jw·2022년 2월 20일
0

백준

목록 보기
17/141
post-thumbnail

문제 설명

https://www.acmicpc.net/problem/2828
N칸으로 나눠져 구성된 스크린 위에서 사과가 여러개 떨어진다. M칸의 바구니를 가지고 떨어지는 사과를 모두 담으려할 때 바구니의 이동거리의 최솟값을 구하는 문제다.

아이디어

이런 문제는 바구니의 시작점끝점을 따로 지정해서 그 범위 안에 사과가 떨어지는지 아닌지 체크하면 된다.

바구니의 시작점: l
바구니의 끝점: r=l+(m-1)

만약 바구니 범위를 벗어난 곳에서 사과가 떨어진다면 l과 r의 범위를 재설정 해주고 그 만큼 이동한 것이므로 이동거리를 증가시켜주면 된다.


전체 코드

#include <iostream>
using namespace std;
int n, m, j, temp, ret;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m >> j;
    int l = 1;
    for (int i = 0; i < j; i++) {
        int r = l + m - 1;
        cin >> temp;
        if (temp >= l && temp <= r)continue;
        else{
            if (temp < l) {
                ret += l - temp;
                l =temp;
                
            }
            else {
                l += temp - r;
                ret += temp - r;
            }
        }
    }
    cout << ret;

}
profile
다시태어나고싶어요

0개의 댓글