D. Sleepy Cow Herding (Bronze)

- iknoom1107(최문기)

케이스 분류하는 문제입니다.

소가 움직이는데 다른 두 소 사이로만 움직일 수 있습니다.

연속된 3 숫자를 만드는 최소, 최대 이동횟수를 구하는 문제입니다.

각 소의 위치를 a, b, c라 하고 a-b 사이의 간격을 p, b-c 사이의 간격을 q라고 하겠습니다.

  1. p > 1 and q > 1

    최소는 2 입니다.

    왜냐하면 a가 c의 두칸 뒤로 이동하고

    b를 a와 c 사이로 이동하면 항상 2번만에 연속된 세 숫자를 만들 수 있습니다.

    최대는 max(p, q)입니다.

    한 칸씩 abc -> bac -> abc -> ... 를 반복하거나

    한 칸씩 abc -> acb -> abc -> ... 를 반복하거나 둘 중 하나가 최대겠죠.

  2. p == 1 or q == 1

    최소는 1 입니다.

  3. p == 0 and q == 0

    이미 연속된 세 숫자인 상태이므로 답은 둘 다 0입니다.

  4. p == 0 or q == 0

    둘 중 하나가 0이면 0인 것이 없다고 생각하고 하나만 고려합니다.

소스 코드 (Python)

a, b, c = sorted(map(int,input().split()))
p = c - b - 1
q = b - a - 1
t = 2
if p == 1 or q == 1: t = 1
r = max(p,q)
print(min(t,r))
print(r)

Last updated