세 개의 값 b와 c가 있다고 가정합니다. 우리는 크기가 각각, b, c인 돌 더미 세 개를 가지고 솔리테어 게임을 하고 있습니다. 각 턴마다 플레이어는 비어 있지 않은 두 개의 다른 더미를 선택하고 각각에서 하나의 돌을 가져 와서 점수에 1점을 추가합니다. 비어 있지 않은 더미가 2개 미만이면 게임이 종료됩니다. 그래서 우리는 당신이 얻을 수 있는 최대 점수를 찾아야 합니다.
따라서 입력이 a =4, b =4, c =6과 같으면 초기 상태가 (4, 4, 6)이므로 출력은 7이 되고 다음 단계를 따를 수 있습니다. -
-
현재 상태가 (3, 3, 6)이 되도록 첫 번째 및 두 번째 더미에서 선택합니다.
-
현재 상태가 (2, 3, 5)가 되도록 첫 번째 및 세 번째 더미에서 선택
-
현재 상태가 (1, 3, 4)가 되도록 첫 번째 및 세 번째 더미에서 선택
-
현재 상태가 (0, 3, 3)이 되도록 첫 번째 및 세 번째 더미에서 선택
-
현재 상태가 (0, 2, 2)가 되도록 두 번째 및 세 번째 더미에서 선택
-
현재 상태가 (0, 1, 1)이 되도록 두 번째 및 세 번째 더미에서 선택
-
현재 상태가 (0, 0, 0)이 되도록 두 번째 및 세 번째 더미에서 선택
그리고 마지막으로 비어 있지 않은 더미가 두 개 미만이므로 게임이 종료됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
minimum :=b, c 중 최소값
-
최대 :=최대, b 및 c
-
왼쪽 :=a + b + c - 최대 - 최소
-
최대-왼쪽 <=최소인 경우
-
최소값 + 왼쪽 - (1 + 최소값 - (최대 왼쪽))/2의 몫을 반환
-
-
반환 최소값 + (최소값(최대-최소) 및 왼쪽)
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(a, b, c):minimum =min(a,b,c) maximum =max(a,b,c) left =a+b+c-maximum-minimum if maximum-left<=최소값:최소값 반환 + 왼쪽(1+최소값-(최대 왼쪽))//2 최소값 반환 + 최소값(최대-최소, 왼쪽)a =4b =4c =6print(solve(a, b, c))사전>입력
4, 4, 6출력
7