D. Sleepy Cow Herding (Bronze)
- iknoom1107(최문기)
케이스 분류하는 문제입니다.
소가 움직이는데 다른 두 소 사이로만 움직일 수 있습니다.
연속된 3 숫자를 만드는 최소, 최대 이동횟수를 구하는 문제입니다.
각 소의 위치를 a, b, c라 하고 a-b 사이의 간격을 p, b-c 사이의 간격을 q라고 하겠습니다.
p > 1 and q > 1
최소는 2 입니다.
왜냐하면 a가 c의 두칸 뒤로 이동하고
b를 a와 c 사이로 이동하면 항상 2번만에 연속된 세 숫자를 만들 수 있습니다.
최대는 max(p, q)입니다.
한 칸씩 abc -> bac -> abc -> ... 를 반복하거나
한 칸씩 abc -> acb -> abc -> ... 를 반복하거나 둘 중 하나가 최대겠죠.
p == 1 or q == 1
최소는 1 입니다.
p == 0 and q == 0
이미 연속된 세 숫자인 상태이므로 답은 둘 다 0입니다.
p == 0 or q == 0
둘 중 하나가 0이면 0인 것이 없다고 생각하고 하나만 고려합니다.
소스 코드 (Python)
Last updated