https://www.acmicpc.net/problem/2828
1. 메인 아이디어
- l(=left)와 r(=right)를 고려한다. (left는 바구니 왼쪽, right는 바구니 오른쪽)
- 바구니의 길이가 1이기 때문에 시작 l = 1, r = 1 이다 ( r = 2 가아님, 2가되면 바구니의 길이가 2임)
- l을 통하여 r을 정의하면, r = l + m - 1
- 바구니가 사과보다 왼쪽, 오른쪽에 있을 때를 고려한다.
2. 소스코드
import sys
input = sys.stdin.readline
# 5 1
# 3
# 1
# 5
# 3
# 1 2 3 4 5
# | | | | | |
# | | | | | |
# | | | | | |
# l=1, r =1 , r은 2가아님, 왜냐하면 바구니 길이가 1이기 때문
n, m = map(int, input().split())
J = int(input())
l, ret = 1, 0 # r = l + m - 1 -> r = 1
for i in range(J):
r = l + m - 1
apple = int(input())
if l <= apple <= r: continue
else:
if apple < l: # 사과보다 바구니가 오른쪽
ret += l - apple
l = apple
else: # 바구니가 사과보다 왼쪽
l += apple - r
ret += apple - r
print(ret)
'Coding Test > Baek Joon.' 카테고리의 다른 글
2525 - 오븐시계 (0) | 2024.08.31 |
---|---|
2870 - 수학숙제 (0) | 2024.08.25 |
2910 - 빈도 정렬 (0) | 2024.08.24 |
1992 - 쿼드트리 (0) | 2024.08.22 |
2583 - 영역 구하기 (0) | 2024.08.22 |