문제 링크입니다: https://www.acmicpc.net/problem/15751
이 문제는 사실 단순 계산을 통해 아래와 같은 세 가지 중 최소를 출력해주면 되는 문제였습니다.
1. A ~ B까지 뚜벅뚜벅
2. A -> X -> Y -> B
3. A -> Y -> X -> B
저도 위 세 가지 경로를 고려했지만 바보 같이 BFS(Breadth First Search)를 사용하여 코드 길이만 엄청 길어졌네요.
#include <iostream>
#include <queue>
using namespace std;
bool visited[100 + 1];
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int a, b, x, y;
cin >> a >> b >> x >> y;
queue<pair<int, int>> q;
q.push({ a, 0 });
visited[a] = true;
if (a == x)
{
visited[y] = true;
q.push({ y, 0 });
}
if (a == y)
{
visited[x] = true;
q.push({ x, 0 });
}
while (!q.empty())
{
int cur = q.front().first;
int cnt = q.front().second;
q.pop();
if (cur == b)
{
cout << cnt << "\n";
break;
}
if (!visited[cur - 1])
{
visited[cur - 1] = true;
if (x == cur - 1)
{
q.push({ y, cnt + 1 });
visited[y] = true;
}
else if (y == cur - 1)
{
q.push({ x, cnt + 1 });
visited[x] = true;
}
q.push({ cur - 1, cnt + 1 });
}
if (!visited[cur + 1])
{
visited[cur + 1] = true;
if (x == cur + 1)
{
q.push({ y, cnt + 1 });
visited[y] = true;
}
else if (y == cur + 1)
{
q.push({ x, cnt + 1 });
visited[x] = true;
}
q.push({ cur + 1, cnt + 1 });
}
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 15753번 Taming the Herd (0) | 2018.09.15 |
---|---|
백준 15752번 Hoofball (0) | 2018.09.15 |
백준 10696번 Prof. Ossama (0) | 2018.09.15 |
백준 3040번 백설 공주와 일곱 난쟁이 (0) | 2018.09.14 |
백준 2822번 점수 계산 (0) | 2018.09.14 |