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

+ Recent posts