Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 유니티 해상도 설정
- networkbehaviourid
- m585 수리
- networkobject.networkid
- Github DeskTop Merge
- unity merge
- networkobject
- githubdesktopmerge
- 깃허브 데스크탑 병합
- stateauthority
- 유니티 브랜치 merge
- m585
- 오브젝트 깜빡임
- NavMesh
- 유니티 해상도
- unity 병합
- nav오브젝트사이거리
- 몬스터
- 유니티
- navigation
- 유니티 합치기
- M590
- 유니티 해상도 변경
- Unity
- 유니티 머지
- unity git
- m590 수리
- nav거리
- 깃허브 데스크탑 합치기
Archives
- Today
- Total
집게사장의 꿈
백준 C# 9019 DSLR 본문
문제
입력되는 DSLR 명령을 통해 입력 숫자와 결과 숫자를 같게 만들기 위해 몇번의 명령이 최소한으로 필요한 것인지 판단
물론 같은 순서로 같은 결과값이 나오는 경우가 있겠지만, 그것은 고려하지 않는 듯
해결
모든 경우의 수를 고려해야 되는 것이기 때문에 하나의 진행사항이 진행된 후 다른 진행 사항도 동시에 진행을 해야되는 것이 문제였다.
각 경우를 모두 문어발과 같이 퍼저나가는 것을 만드는 것이 목적이다.
방문을 판단하는 까닭 : LR 같은 명령은 4번이 진행된 후 반복되기 때문
기록하는 방법이 실패한 이유 : Stack.Contain으로 방문을 판단했는데, 탐색하는 시간 때문에 시간 초과가 발생
using System.Collections.Generic;
using System;
using System.Linq;
using System.IO;
using System.Text;
namespace ConsoleApp1
{
struct info{
public int num;
public string mandate;
}
internal class TEST
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
using (StreamReader sr = new StreamReader(Console.OpenStandardInput()))
{
int iter = int.Parse(sr.ReadLine());
for (int i = 0; i < iter; i++)
{
int[] v = sr.ReadLine().Split().Select(int.Parse).ToArray();
Queue<info> q = new Queue<info>();
q.Enqueue(new info { num = v[0], mandate = "" });
bool[] register = new bool[10000];
while (true)
{
var a = q.Dequeue();
if (a.num == v[1])
{
sb.AppendLine(a.mandate);
break;
}
//D
int D = a.num * 2 % 10000;
if (!register[D])
{
register[D] = true;
q.Enqueue(new info { num = D, mandate = $"{a.mandate}D" });
}
//S
int S = (a.num - 1 + 10000) % 10000;
if (!register[S])
{
register[S] = true;
q.Enqueue(new info { num = S, mandate = $"{a.mandate}S" });
}
//L
int L = a.num % 1000 * 10 + a.num / 1000;
if (!register[L])
{
register[L] = true;
q.Enqueue(new info { num = L, mandate = $"{a.mandate}L" });
}
//R
int R = a.num / 10 + a.num % 10 * 1000;
if (!register[R])
{
register[R] = true;
q.Enqueue(new info { num = R, mandate = $"{a.mandate}R" });
}
}
}
}
Console.WriteLine(sb);
}
}
}
'기타 > 백준' 카테고리의 다른 글
백준 C# LCS 9251 (1) | 2024.08.15 |
---|---|
백준 C# 1916 최소비용 구하기 (0) | 2024.08.10 |
백준 C# 16928 뱀과 사다리 게임 (0) | 2024.08.04 |
백준 C# 10026 적록색약 (0) | 2024.08.01 |
백준 C# 1655 가운데를 말해요 (0) | 2024.07.31 |