본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 2828번 : 사과 담기 게임

반응형

www.acmicpc.net/problem/2828

 

2828번: 사과 담기 게임

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

www.acmicpc.net

간단한 구현 문제였습니다.

 

풀이방법

 1. left는 바구니의 왼쪽 끝, right는 바구니의 오른쪽 끝으로 정해 변수를 선언합니다.

 

 2. 최소로 움직이는 것은 left보다 떨어질 사과의 위치가 더 작은 경우와 right보다 위치가 더 큰 경우에만 움직이는 것입니다. 따라서 두 경우에 해당할 때만 위치를 옮겨줍니다.

 

 3. 이동거리의 최솟값 ans를 출력합니다.

 

Code

#include <bits/stdc++.h>
using namespace std;
int n,m,j, ans;
int main(){
    cin >> n >> m >> j;
    int left = 1,right = m;
    while(j--){
        int pos;
        cin >> pos;
        while(left > pos || right < pos){
            if(pos > right) right++, ans++, left++;
            if(pos < left) right--,ans++,left--;
        }
    }
    cout << ans << '\n';   
}