https://www.acmicpc.net/problem/16928
또 BFS 문제이다.
이번에는 뱀과 사다리라는 조건이 주어진 문제이다.
이 문제는 map을 x, y를 나누지 않고 100칸을 기준으로 한 배열로 보는 것이 편할 것이라 생각하였다.
그리고 사다리와 뱀을 따로 나누어 저장했는데, 푼 이후로 다른 분 코드를 찾아보니 나누지 않고 한 배열 안에 저장하더라!!
생각해 보니 굳이 나눌 필요가 없다고 생각되었다.
using System;
using System.IO;
using System.Text;
namespace B16928
{
class Program
{
static int N, M;
static int[] map = new int[101];
static bool[] visited = new bool[101];
static (int, int)[] ladders = new (int, int)[15];
static (int, int)[] snakes = new (int, int)[15];
static Queue<(int, int)> q = new Queue<(int, int)>();
static int Min = 0;
static void BFS()
{
q.Enqueue((1, 0));
visited[1] = true;
while (q.Count > 0)
{
var deq = q.Dequeue();
int deqx = deq.Item1;
int count = deq.Item2;
//사다리 뱀 검사
for(int i = 0; i < 15; i++)
{
if (ladders[i].Item1 == deqx)
{
//사다리가 있다면 이동
deqx = ladders[i].Item2;
break;
}
if (snakes[i].Item1 == deqx)
{
//뱀이 있다면 이동
deqx = snakes[i].Item2;
break;
}
}
//주사위 6칸의 경우의 수 이동
for(int i = 1; i <= 6; i++)
{
if (deqx + i == 100)
{
//100번 칸 도착
if (Min == 0) Min = count + 1; //저장된 Min 값이 없다면 새로 저장
else if (Min > count) Min = count + 1; //저장된 Min 값이 있다면 크기 비교
continue;
}
//100을 초과하거나 방문했다면 continue
if (deqx + i > 100 || visited[deqx + i]) continue;
q.Enqueue((deqx + i, count + 1));
visited[deqx + i] = true;
}
}
}
static void Main()
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
//입력
int[] nm = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
N = nm[0];
M = nm[1];
//사다리
for(int i = 0; i < N; i++)
{
int[] xy = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
ladders[i].Item1 = xy[0];
ladders[i].Item2 = xy[1];
}
//뱀
for(int i = 0; i < M; i++)
{
int[] uv = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
snakes[i].Item1 = uv[0];
snakes[i].Item2 = uv[1];
}
BFS();
sw.Write(Min);
sr.Close();
sw.Flush();
sw.Close();
}
}
}
'알고리즘 > 백준 BOJ' 카테고리의 다른 글
[ BOJ/C# ] 2108 통계학 (0) | 2023.10.27 |
---|---|
[ BOJ/C# ] 18110 solved.ac (0) | 2023.10.25 |
[ BOJ/C# ] 1697 숨바꼭질 (0) | 2023.10.24 |
[ BOJ/C# ] 1654 랜선 자르기 (0) | 2023.10.23 |
[ BOJ/C# ] 1436 영화감독 숌 (0) | 2023.10.22 |