✏️ 문제
문제 파악
처음에는 현재 위치를 기준으로 현재 위치가 중간에 있으면 앞뒤로 (현재위치-길이/2)부터 (현재위치+길이/2)까지 사과가 떨어지는 위치에 해당되면 거리를 더하지 않고 해당되지 않으면 거리를 더하고 이런 방식으로 코드를 짜려고 했다.
근데 하다보니 복잡하고 경우의 수가 너무 많은 것 같아서 결국 포기..
바구니의 왼쪽 위치와 오른쪽 위치를 저장해두고
- 바구니의 왼쪽 위치보다 사과의 위치가 작으면 이동거리 = (바구니의 왼쪽 위치 - 사과의 위치)
- 바구니의 오른쪽 위치보다 사과의 위치가 크면 이동거리 = (사과의 위치 - 바구니의 오른쪽 위치)
- 그 외의 경우는 가만히 있어도 바구니 위치에 사과의 위치가 해당 (들어옴)
라고 푸는 게 훨 편했다..
알고리즘
- 그리디 알고리즘
- 구현
코드
n,m = map(int, input().split())
j = int(input())
left = 1
right = m
count = 0
for i in range(j):
position = int(input())
if left > position:
count += (left - position)
right -= (left - position)
left = position
elif right < position:
count += (position - right)
left += (position - right)
right = position
print(count)
'PS > 백준' 카테고리의 다른 글
[Python] 11508번 2+1 세일 (0) | 2024.07.20 |
---|---|
[Python] 1969번 DNA (0) | 2024.07.19 |
[Python] 19941번 햄버거 분배 (0) | 2024.07.19 |
[Python] 2012번 등수 매기기 (0) | 2024.07.19 |
[Python] 15904번 UCPC는 무엇의 약자일까? (2) | 2024.07.19 |