{"componentChunkName":"component---src-templates-blog-post-js","path":"/Problem-Solving/2021-04-03-14867번-물통/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"b37fcc53-897e-513e-ae30-87d356cc8c58","excerpt":"https://www.acmicpc.net/problem/1967 문제 문제 용량이 다른 두 개의 빈 물통 A, B가 있다. 이 물통들에 물을 채우고 비우는 일을 반복하여 두 물통을 원하는 상태(목표하는 양의 물을 담은 상태)가 되도록 만들고자 한다. 물통 이외에는 물의 양을 정확히 잴 수 있는 방법이 없으며, 가능한 작업은 다음과 같은 세 종류가 전부이다. F(x): Fill x: 물통 x에 물을 가득 채운다. (물을 채우기 전에 물통 x…","html":"<p><a href=\"https://www.acmicpc.net/problem/1967\">https://www.acmicpc.net/problem/1967</a></p>\n<h2 id=\"문제\" style=\"position:relative;\"><a href=\"#%EB%AC%B8%EC%A0%9C\" aria-label=\"문제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>문제</h2>\n<p><strong>문제</strong><br></p>\n<p>용량이 다른 두 개의 빈 물통 A, B가 있다. 이 물통들에 물을 채우고 비우는 일을 반복하여 두 물통을 원하는 상태(목표하는 양의 물을 담은 상태)가 되도록 만들고자 한다. 물통 이외에는 물의 양을 정확히 잴 수 있는 방법이 없으며, 가능한 작업은 다음과 같은 세 종류가 전부이다.</p>\n<p>[F(x): Fill x]: 물통 x에 물을 가득 채운다. (물을 채우기 전에 물통 x가 비어있는지 여부는 관계없음. 다른 물통은 그대로 둠)\n[E(x): Empty x]: 물통 x의 물을 모두 버린다. (다른 물통은 그대로 둠)\n[M(x,y): Move water from x to y)]: 물통 x의 물을 물통 y에 붓는다. 이때 만약 물통 x에 남아 있는 물의 양이 물통 y에 남아 있는 빈 공간보다 적거나 같다면 물통 x의 물을 물통 y에 모두 붓는다. 만약 물통 x에 남아 있는 물의 양이 물통 y에 남아 있는 빈 공간보다 많다면 부을 수 있는 만큼 최대로 부어 물통 y를 꽉 채우고 나머지는 물통 x에 남긴다.\n예를 들어, 물통 A와 B의 용량이 각각 2리터와 5리터라고 하자. 두 물통 모두 빈 상태에서 시작하여 최종적으로 물통 A에는 2리터, 물통 B에는 4리터 물을 남기길 원할 경우, 다음과 같은 순서로 작업을 수행하면 총 8회의 작업으로 원하는 상태에 도달할 수 있다.</p>\n<p>(0,0)→[F(B)]→(0,5)→[M(B,A)]→(2,3)→[E(A)]→(0,3)→[M(B,A)]→(2,1)→[E(A)]→(0,1)→[M(B,A)]→(1,0)→[F(B)]→(1,5)→[M(B,A)]→(2,4)</p>\n<p>하지만, 작업 순서를 아래와 같이 한다면 필요한 작업 총 수가 5회가 된다.</p>\n<p>(0,0)→[F(A)]→(2,0)→[M(A,B)]→(0,2)→[F(A)]→(2,2)→[M(A,B)]→(0,4)→[F(A)]→(2,4)</p>\n<p>두 물통의 용량과 원하는 최종 상태를 입력으로 받은 후, 두 물통이 비어 있는 상태에서 시작하여 최종 상태에 도달하기 위한 최소 작업 수를 구하는 프로그램을 작성하시오.</p>\n<p><strong>입력</strong><br></p>\n<p>표준 입력으로 물통 A의 용량을 나타내는 정수 a(1 ≤ a &#x3C; 100,000), 물통 B의 용량을 나타내는 정수 b(a &#x3C; b ≤ 100,000), 최종 상태에서 물통 A에 남겨야 하는 물의 용량을 나타내는 정수 c(0 ≤ c ≤ a), 최종 상태에서 물통 B에 남겨야 하는 물의 용량을 나타내는 정수 d(0 ≤ d ≤ b)가 공백으로 분리되어 한 줄에 주어진다.</p>\n<p><strong>출력</strong><br></p>\n<p>목표 상태에 도달하는 최소 작업 수를 나타내는 정수를 표준 출력으로 출력한다. 만약 목표 상태에 도달하는 방법이 없다면 –1을 출력한다.</p>\n<h2 id=\"풀이\" style=\"position:relative;\"><a href=\"#%ED%92%80%EC%9D%B4\" aria-label=\"풀이 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>풀이</h2>\n<p>시도할 수 있는 행동 6개를 정의하고 하나씩 물통에 적용해본다. 그런데 방문여부를 체크하는 visit 배열을 기존 bfs 처럼 사용하면 최대 100000 X 100000 의 메모리가 필요하기 때문에 메모리 초과를 만나게 된다. 따라서 이번 문제에서는 set을 사용해서 방문여부를 체크하는 방법으로 해결할 수 있었다. 다른 사람들의 문제풀이를 보니 수학적으로 접근해서 푼 경우가 많던데 사실 봐도 잘 모르겠다..</p>\n<h2 id=\"코드\" style=\"position:relative;\"><a href=\"#%EC%BD%94%EB%93%9C\" aria-label=\"코드 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>코드</h2>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;iostream></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;queue></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;set></span></span>\n\n<span class=\"token keyword\">using</span> <span class=\"token keyword\">namespace</span> std<span class=\"token punctuation\">;</span>\n\npair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> <span class=\"token function\">fillBucket</span><span class=\"token punctuation\">(</span>pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> x<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    x<span class=\"token punctuation\">.</span>first <span class=\"token operator\">=</span> x<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> x<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\npair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> <span class=\"token function\">emptyBucket</span><span class=\"token punctuation\">(</span>pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> x<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    x<span class=\"token punctuation\">.</span>first <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> x<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\npair<span class=\"token operator\">&lt;</span>pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span><span class=\"token punctuation\">,</span> pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">>></span> <span class=\"token function\">moveXtoY</span><span class=\"token punctuation\">(</span>pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> x<span class=\"token punctuation\">,</span> pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> y<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>first <span class=\"token operator\">&lt;=</span> y<span class=\"token punctuation\">.</span>second <span class=\"token operator\">-</span> y<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        y<span class=\"token punctuation\">.</span>first <span class=\"token operator\">+=</span> x<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">;</span>\n        x<span class=\"token punctuation\">.</span>first <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        x<span class=\"token punctuation\">.</span>first <span class=\"token operator\">=</span> x<span class=\"token punctuation\">.</span>first <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>second <span class=\"token operator\">-</span> y<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        y<span class=\"token punctuation\">.</span>first <span class=\"token operator\">=</span> y<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> x<span class=\"token punctuation\">,</span> y <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">bfs</span><span class=\"token punctuation\">(</span>pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> A<span class=\"token punctuation\">,</span> pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> B<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> targetA<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> targetB<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    queue<span class=\"token operator\">&lt;</span>pair<span class=\"token operator\">&lt;</span>pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span><span class=\"token punctuation\">,</span> pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">>></span><span class=\"token operator\">></span> bucketStatus<span class=\"token punctuation\">;</span>\n    set<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token operator\">></span> visited<span class=\"token punctuation\">[</span><span class=\"token number\">100001</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> A<span class=\"token punctuation\">,</span> B <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> depth <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">empty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        size_t size <span class=\"token operator\">=</span> bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> size<span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> currA <span class=\"token operator\">=</span> bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">front</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">;</span>\n            pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> currB <span class=\"token operator\">=</span> bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">front</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">;</span>\n            bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>currA<span class=\"token punctuation\">.</span>first <span class=\"token operator\">==</span> targetA <span class=\"token operator\">&amp;&amp;</span> currB<span class=\"token punctuation\">.</span>first <span class=\"token operator\">==</span> targetB<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">return</span> depth<span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n\n            <span class=\"token keyword\">auto</span> fillA <span class=\"token operator\">=</span> <span class=\"token function\">fillBucket</span><span class=\"token punctuation\">(</span>currA<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">auto</span> fillB <span class=\"token operator\">=</span> <span class=\"token function\">fillBucket</span><span class=\"token punctuation\">(</span>currB<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">auto</span> emptyA <span class=\"token operator\">=</span> <span class=\"token function\">emptyBucket</span><span class=\"token punctuation\">(</span>currA<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">auto</span> emptyB <span class=\"token operator\">=</span> <span class=\"token function\">emptyBucket</span><span class=\"token punctuation\">(</span>currB<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">auto</span> moveX <span class=\"token operator\">=</span> <span class=\"token function\">moveXtoY</span><span class=\"token punctuation\">(</span>currA<span class=\"token punctuation\">,</span> currB<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">auto</span> moveY <span class=\"token operator\">=</span> <span class=\"token function\">moveXtoY</span><span class=\"token punctuation\">(</span>currB<span class=\"token punctuation\">,</span> currA<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>visited<span class=\"token punctuation\">[</span>fillA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>currB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> visited<span class=\"token punctuation\">[</span>fillA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">end</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                visited<span class=\"token punctuation\">[</span>fillA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">insert</span><span class=\"token punctuation\">(</span>currB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> fillA<span class=\"token punctuation\">,</span> currB <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>visited<span class=\"token punctuation\">[</span>currA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>fillB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> visited<span class=\"token punctuation\">[</span>currA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">end</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                visited<span class=\"token punctuation\">[</span>currA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">insert</span><span class=\"token punctuation\">(</span>fillB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> currA<span class=\"token punctuation\">,</span> fillB <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>visited<span class=\"token punctuation\">[</span>emptyA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>currB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> visited<span class=\"token punctuation\">[</span>emptyA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">end</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                visited<span class=\"token punctuation\">[</span>emptyA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">insert</span><span class=\"token punctuation\">(</span>currB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> emptyA<span class=\"token punctuation\">,</span> currB <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>visited<span class=\"token punctuation\">[</span>currA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>emptyB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> visited<span class=\"token punctuation\">[</span>currA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">end</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                visited<span class=\"token punctuation\">[</span>currA<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">insert</span><span class=\"token punctuation\">(</span>emptyB<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> currA<span class=\"token punctuation\">,</span> emptyB <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>visited<span class=\"token punctuation\">[</span>moveX<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>moveX<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> visited<span class=\"token punctuation\">[</span>moveX<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">end</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                visited<span class=\"token punctuation\">[</span>moveX<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">insert</span><span class=\"token punctuation\">(</span>moveX<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span>moveX<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>visited<span class=\"token punctuation\">[</span>moveY<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>moveY<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> visited<span class=\"token punctuation\">[</span>moveY<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">end</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                visited<span class=\"token punctuation\">[</span>moveY<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">insert</span><span class=\"token punctuation\">(</span>moveY<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                bucketStatus<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> moveY<span class=\"token punctuation\">.</span>second<span class=\"token punctuation\">,</span> moveY<span class=\"token punctuation\">.</span>first <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n        depth<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">,</span> targetA<span class=\"token punctuation\">,</span> targetB<span class=\"token punctuation\">;</span>\n    cin <span class=\"token operator\">>></span> a <span class=\"token operator\">>></span> b <span class=\"token operator\">>></span> targetA <span class=\"token operator\">>></span> targetB<span class=\"token punctuation\">;</span>\n\n    pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> A <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> a <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    pair<span class=\"token operator\">&lt;</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span><span class=\"token operator\">></span> B <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> b <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    cout <span class=\"token operator\">&lt;&lt;</span> <span class=\"token function\">bfs</span><span class=\"token punctuation\">(</span>A<span class=\"token punctuation\">,</span> B<span class=\"token punctuation\">,</span> targetA<span class=\"token punctuation\">,</span> targetB<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","frontmatter":{"title":"[백준 알고리즘] 14867번: 물통","date":"April 03, 2021"}}},"pageContext":{"slug":"/Problem-Solving/2021-04-03-14867번-물통/","previous":{"fields":{"slug":"/Problem-Solving/2021-04-03-1967번-트리의지름/"},"frontmatter":{"title":"[백준 알고리즘] 1967번: 트리의 지름","category":"Problem-Solving","draft":false}},"next":{"fields":{"slug":"/Problem-Solving/2021-04-03-1922번-네트워크연결/"},"frontmatter":{"title":"[백준 알고리즘] 1922번: 네트워크 연결","category":"Problem-Solving","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}