[백준] 2828 : 사과담기게임 - Python

Chooooo·2022년 9월 23일
0

알고리즘/백준

목록 보기
7/182
post-thumbnail


문제 풀이
사과가 떨어지는 위치에 맞게 그때 그때 최소한으로 바구니를 움직여서 바구니의 총 움직인 거리를 최소화 시켜야했다. 바구니의 시작위치, 그리고 차지하는 칸이 정해져있기 때문에 시작점 끝점을 기준으로 나누어 풀었다.
바구니의 시작점보다 왼쪽, 바구니의 끝점보다 오른쪽에서 떨어질 때를 기준으로 나눠서 생각했어야했다.

생각
바구니가 차지하는 칸이 1칸이 아니라 여러 칸일 수도 있으므로 바구니의 시작점, 끝점을 나눠서 생각할 수 있었어야했다.

소스코드

import sys


#바구니 이동거리의 최솟값.
N, M = map(int, input().split())    #바구니 시작위치 왼쪽 M칸, M칸 차지.
count = int(input()) #떨어지는 사과 개수
data = []
for _ in range(count):
    data.append(int(input()))  #사과가 떨어지는 위치

dis = 0
start = 1
end = M

for i in range(count):
    if data[i] >= start and data[i] <= M:  #안움직여도 사과 먹음
        continue
    elif data[i] < start:
        d = start - data[i]  #이동해야할 최소 거리
        dis += d
        start -= d
        end -= d
    elif data[i] > end:
        d = data[i] - end
        dis += d
        end += d
        start += d
print(dis)
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글