크기가 서로 다른 양동이 두 개와, 어느 양동이를 먼저 채울지가 주어졌을 때, 양동이 사이로 물을 전략적으로 옮겨 정확한 리터 수를 측정하는 데 필요한 동작 횟수를 구하세요.
풀이가 따라야 하는 규칙이 몇 가지 있어요:
프로그램은 다음을 입력으로 받아요:
프로그램은 다음을 구해야 해요:
참고: 양동이 하나에 변화가 생기든 둘 모두에 변화가 생기든, 그때마다 동작 한 번(1회)으로 쳐요.
예시: one 양동이에는 최대 7리터, two 양동이에는 최대 11리터를 담을 수 있어요. 어떤 단계에서 one 양동이에 7리터, two 양동이에 8리터가 들어 있다고 해봐요 (7,8). one 양동이를 비우고 two 양동이는 그대로 두어 각각 0리터와 8리터가 남는다면 (0,8), 이는 동작 한 번으로 쳐요. 반대로, two 양동이가 가득 찰 때까지 one 양동이에서 two 양동이로 물을 부어 one 양동이에 4리터, two 양동이에 11리터가 되었다면 (4,11), 이것도 동작 한 번으로만 쳐요.
또 다른 예시: one 양동이에는 3리터, two 양동이에는 최대 5리터를 담을 수 있어요. one 양동이부터 시작해야 한다고 해봐요. 그러면 첫 번째 동작은 one 양동이를 채우는 거예요. 두 번째 동작으로는 one 양동이를 비우기로 해요. 세 번째 동작으로는 two 양동이를 채우면 안 돼요. 세 번째 규칙을 어기게 되거든요. 어떤 동작을 한 뒤에도 시작 양동이가 비어 있고 다른 양동이가 가득 찬 상태가 되면 안 되니까요.
Lindsay Levine이 Fullstack Academy에서 <3를 담아 작성했어요.
Exercism에 가입하고 F# 트랙을 개념 18개연습 문제 148개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.