6014 : 상태공간 탐색 — 물병 붓기
•시간제한: 2.000 S
•메모리제한: 256 MB
•제출: 0
•통과: 0
•만든사람: suakii
문제 설명
용량이 각각 $A, B, C$ 리터인 세 개의 물병이 있습니다. 물병들 사이에서 물을 다른 물병으로 붓는 조작을 반복하여 목표로 하는 물의 상태 $t_a, t_b, t_c$ 리터로 만들려고 합니다.
물을 부을 때는 어느 한 물병이 비거나 다른 한 물병이 가득 찰 때까지 부어야 합니다. 목표 상태로 도달할 수 있는 최소 물 붓기 횟수를 구하십시오.
이 문제는 격자가 아닌 물병 내부의 물 양 상태를 노드로 정의하여 탐색을 진행하는 상태 공간 탐색(State Space Search) 문제입니다. BFS를 사용해 최소 이동을 탐색하고 방문 표시를 활용하십시오.
[제약 조건]
• 물병 최대 용량: $1 \le A \le B \le C \le 100$ (정수)
• 초기 및 목표 상태는 각 물병 최대 용량을 초과하지 않습니다.
• 도달 불가능하면 -1을 출력합니다.
물을 부을 때는 어느 한 물병이 비거나 다른 한 물병이 가득 찰 때까지 부어야 합니다. 목표 상태로 도달할 수 있는 최소 물 붓기 횟수를 구하십시오.
이 문제는 격자가 아닌 물병 내부의 물 양 상태를 노드로 정의하여 탐색을 진행하는 상태 공간 탐색(State Space Search) 문제입니다. BFS를 사용해 최소 이동을 탐색하고 방문 표시를 활용하십시오.
[제약 조건]
• 물병 최대 용량: $1 \le A \le B \le C \le 100$ (정수)
• 초기 및 목표 상태는 각 물병 최대 용량을 초과하지 않습니다.
• 도달 불가능하면 -1을 출력합니다.
입력 설명
첫째 줄에 세 물병의 최대 용량 $A, B, C$가 공백으로 구분되어 주어집니다. ($1 \le A \le B \le C \le 100$)
둘째 줄에 세 물병의 초기 상태 물 양 $a, b, c$가 주어집니다. ($0 \le a \le A, 0 \le b \le B, 0 \le c \le C$)
셋째 줄에 우리가 도달하고자 하는 목표 상태 물 양 $t_a, t_b, t_c$가 주어집니다.
둘째 줄에 세 물병의 초기 상태 물 양 $a, b, c$가 주어집니다. ($0 \le a \le A, 0 \le b \le B, 0 \le c \le C$)
셋째 줄에 우리가 도달하고자 하는 목표 상태 물 양 $t_a, t_b, t_c$가 주어집니다.
출력 설명
목표 상태에 도달하기 위한 최소 물 붓기 횟수를 출력합니다. 만약 아무리 물을 부어도 목표 상태를 만들 수 없는 경우에는
-1을 출력합니다.
입력 예시
COPY
복사되었습니다!
복사되었습니다!
8 5 3
8 0 0
4 4 0
출력 예시
COPY
복사되었습니다!
복사되었습니다!
7
도움
상태 노드는 튜플
(a, b, c)로 표시합니다. 전체 물의 양의 합은 보존되므로 방문 체크는 2차원 배열 visited[a]로 충분합니다. 큐에 상태와 깊이를 담아 6가지 물 붓기 규칙을 적용해 BFS 탐색을 수행합니다.