알고리즘💻/그리디

BOJ 2828번: 사과 담기 게임

호프 2021. 4. 6. 02:07

www.acmicpc.net/problem/2828

 

2828번: 사과 담기 게임

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

www.acmicpc.net

문제풀이:

사과가 순서대로 떨어지면.. 그냥 단순하게 계산하면 풀 수 있는 문제일 것 같다.

left와 right를 각각 정하고 범위 안에 들어오지 않는 경우에 칸 수를 계산하여 정답에 더하고 위치를 다시 조정해주었다.

 

import sys

N, M = map(int, sys.stdin.readline().split())
j = int(sys.stdin.readline())
location = []
for _ in range(j):
    location.append(int(sys.stdin.readline()))

left = 1
right = M
ans = 0
for i in location:
    if (left<=i) and (right>=i):
        continue
    elif (right<i):
        ans += i-right
        left += i-right
        right += i-right

    elif (left>i):
        ans += left-i
        right -= left-i
        left -= left-i

print(ans)