컨디션 난조 + 아이디어 고갈 + 귀찮음
3단 콤보로 이번 개인 프로젝트는 게임 로직을 분석해보기로 했다 ,,
근데 이제 진행된게 없는
그래서 오늘도 알고리즘 리뷰 ^v^
문제
자연수 x에 1. n을 더하거나 2. 2를 곱하거나 3. 3을 곱해서 y로 변환하기 위한 최소 연산 횟수를 구해라
단, 만들 수 없는 경우 -1을 return
제한 사항
1 <= x <= y <= 1,000,000
1 <= n < y
입출력 예
x y n result 10 40 5 2 10 40 30 1 2 5 4 -1
using System;
using System.Collections.Generic;
public class Solution {
static int result;
public int solution(int x, int y, int n)
{
result = -1;
bfs(x, y, n);
int answer = result;
return answer;
}
static void bfs(int x, int y, int n)
{
Queue<int[]> queue = new Queue<int[]>();
HashSet<int> set = new HashSet<int>();
queue.Enqueue(new int[] { x, 0 });
while (queue.Count > 0)
{
int[] cur = queue.Dequeue();
int curNum = cur[0];
int curCnt = cur[1];
if (curNum == y)
{
result = curCnt;
return;
}
for (int i = 0; i < 3; i++)
{
int nextNum = 0;
switch (i)
{
case 0: nextNum = curNum + n; break;
case 1: nextNum = curNum * 2; break;
case 2: nextNum = curNum* 3; break;
}
if (nextNum <= y && !set.Contains(nextNum))
{
queue.Enqueue(new int[] { nextNum, curCnt + 1 });
set.Add(nextNum);
}
}
}
}
}
야근 할 생각에 신이 나요
이게 다 내 업보...그래요....
끗..