<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Multi-Source BFS on Kelly Dev</title><link>https://kelly-chui.github.io/algorithmtags/multi-source-bfs/</link><description>Recent content in Multi-Source BFS on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 17 Nov 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://kelly-chui.github.io/algorithmtags/multi-source-bfs/index.xml" rel="self" type="application/rss+xml"/><item><title>BOJ 3055. 탈출</title><link>https://kelly-chui.github.io/ps/2022/ps-boj-3055-escape/</link><pubDate>Thu, 17 Nov 2022 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/ps/2022/ps-boj-3055-escape/</guid><description>&lt;h2 id="문제"&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/3055"&gt;https://www.acmicpc.net/problem/3055&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="풀이"&gt;풀이&lt;/h2&gt;
&lt;p&gt;입력으로 그래프가 주어지고, 어느 칸에서 BFS를 시작해야하는지 알려준다. 문제를 읽어보면 고슴도치와 물 둘 다 BFS 탐색을 해야 하는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;주의할 점은 예제에는 초기에 물인 칸이 1개밖에 없지만 문제를 읽어보면 1칸이라는 제약조건이 없다. 따라서 물이 여러칸일 때도 생각하고 프로그래밍을 해야 한다.&lt;/p&gt;
&lt;p&gt;처음에 두 가지 생각을 했다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;BFS탐색을 각각 따로 하는 방법&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;고슴도치를 먼저 BFS 탐색시켜서 그래프에 각 칸마다 몇번째 이동에 도달하는지 검사한다.&lt;/li&gt;
&lt;li&gt;다음에 물을 BFS 탐색해서 1의 결과가 가능한지를 판단한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;고슴도치와 물을 단계별로 번갈아가면서 BFS 탐색 하는 방법&lt;/p&gt;</description></item><item><title>BOJ 7576. 토마토</title><link>https://kelly-chui.github.io/ps/2022/ps-boj-7576-tomato/</link><pubDate>Thu, 10 Nov 2022 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/ps/2022/ps-boj-7576-tomato/</guid><description>&lt;h2 id="문제"&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.acmicpc.net/problem/7576"&gt;https://www.acmicpc.net/problem/7576&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="풀이"&gt;풀이&lt;/h2&gt;
&lt;p&gt;처음엔 무난한 BFS 문제라고 생각했다. 처음부터 익어있는 토마토(루트 토마토라고 하겠다.)가 들어있는 칸을 알아낸 다음에 반복문으로 BFS를 적용하고, 루트 토마토를 할 때마다 만약 칸에 더 적은 숫자가 들어 갈 수 있다면 숫자를 업데이트 하는 식으로 문제를 풀었다.&lt;/p&gt;
&lt;p&gt;그랬더니 시간초과가 나온다. 쓸데없는 연산이 너무 많아서 그렇다.&lt;/p&gt;
&lt;p&gt;정확한 풀이는 BFS 큐를 처음 만들때부터 모든 루트 토마토를 넣어서 초기화 하는 것이었다. 그러면 모든 루트 토마토를 기준으로 동시에 탐색할 수 있으니까.&lt;/p&gt;
&lt;p&gt;칸을 탐색할때도 더 높은 숫자가 나오면 그 칸은 큐에 넣을 필요가 없다. 이미 전에 했던 탐색이 더 좋은 결과를 가져다 주었을태니&lt;/p&gt;</description></item></channel></rss>