2828번: 사과 담기 게임
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<n) 플레이어는="" 게임을="" 하는="" 중에="" 바구니를="" <="" p=""> </n)>
www.acmicpc.net
스크린 N칸, M칸을 차지하는 바구니
바구니 이동 가능 but 경계를 넘어가면 안된다.
초기 상태 : 제일 왼쪽 M칸 차지
한 사과가 바닥에 닿는 즉시, 다른 사과가 떨어지기 시작한다.
바구니의 이동 거리의 최솟값을 구하시오.
def solve(N,M,apples):
L,R = 0, M-1
ans = 0
for point in apples:
# 떨어지는 지점이 오른쪽인지, 왼쪽인지 구분
if point > R :
dist = (point-R)
L,R = L+dist, R+dist
elif point < L :
dist = (L-point)
L,R = L-dist, R-dist
else: continue
ans+=dist
return ans
if __name__=='__main__':
N,M = map(int,input().split())
num = int(input())
apples = []
for _ in range(num):
apples.append(int(input())-1)
### 좌표를 0부터 N-1까지로 설정할 것이기 때문에,
### 사과가 떨어지는 좌표도 0부터 N-1까지로 보정해야 함.
ans = solve(N,M,apples)
print(ans)
# 사과가 떨어지는 지점은 0에서 N-1을 벗어나지 않으므로
# 업데이트 되는 L,R의 범위 또한 고려해주지 않아도 됨.
'공부하는 것들 > 알고리즘' 카테고리의 다른 글
백준 159094 : UCPC는 무엇의 약자일까?(그리디) ** (0) | 2021.02.25 |
---|---|
백준 2839 : 설탕 배달(그리디) (0) | 2021.02.25 |
백준 5585 : 거스름돈 (그리디) (0) | 2021.02.24 |
백준 2810 : 컵홀더(그리디)*** (0) | 2021.02.24 |
백준 1434 : 책 정리(그리디)* (0) | 2021.02.24 |