[알고리즘] 2828번: 사과 담기 게임

2023. 9. 5. 08:38Algorithm/with C++

0. 문제

 

 

2828번: 사과 담기 게임

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

www.acmicpc.net

 


1. 문제 이해

 

예제 입력 1
예제 입력 2

 

  1. N, M, J를 입력을 저장한다.
  2. 바구니의 왼쪽을 중심으로 생각한다.
  3. 바구니의 중심을 기준으로 이동 방향이 왼쪽이면 이동 거리는 abs(사과 - 바구니 중심)이다. abs()cstdlib에서 제공하는 절댓값을 구하는 함수다.
  4. 바구니의 중심을 기준으로 이동 방향이 오른쪽이면…
    1. (사과 - 바구니 중심)M보다 작다면 움직이지 않음.
    2. 크거나 같으면 사과 - 바구니 중심 - M + 1이다.

 


2. 문제 제출

 

// 백준 2828번: 사과 담기 게임
#include <iostream>
#include <cstdlib>

using namespace std;

int n, m, j, pos=0, ret;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    cin >> n >> m >> j;
    for(int i=0; i<j; i++){
        int apple;
        cin >> apple;
        apple--;

        bool goLeft = apple < pos;
        if(goLeft){
            ret += abs(apple - pos);
            pos = apple;
        }else{
            bool notMove = (apple - pos) < m;
            if(notMove) continue;
            int distance = apple - pos - m +1;
            ret += distance;
            pos += distance;
        }
    }

    cout << ret << "\n";

    return 0;
}