1. 문제설명\
자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.
● x에 n을 더합니다
● x에 2를 곱합니다.
● x에 3을 곱합니다.
자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.
2. 제한사항
● 1 ≤ x ≤ y ≤ 1,000,000
● 1 ≤ n < y
3. 입출력 예시
x y n result 10 40 5 2 10 40 30 1 2 5 4 -1
4. 나의 풀이(미완성)
public int solution(int x, int y, int n)
{
int answer = 0;
List<int> list = new List<int>();
list.Add(PlusN(x, y, n));
list.Add(Multiple2(x, y, n));
list.Add(Multiple3(x, y, n));
list.Add(Multiple2And3(x, y, n));
list.RemoveAll(number => number == -1);
list.Sort();
if (list.Count == 0) return -1;
return answer = list[0];
}
public int PlusN(int x, int y, int n)
{
int cnt = 0;
while (x < y)
{
if(x <= y)
{
x += n;
cnt++;
}
}
if (x != y) cnt = -1;
return cnt;
}
public int Multiple2(int x, int y, int n)
{
int cnt = 0;
while (x * 2 <= y)
{
if (x == y) break;
x *= 2;
cnt++;
}
if (x != y)
{
if ((y - x) % n == 0) cnt += (y - x) / n;
else cnt = -1;
}
return cnt;
}
public int Multiple3(int x, int y, int n)
{
int cnt = 0;
while (x * 3 <= y)
{
if (x == y) break;
x *= 3;
cnt++;
}
if (x != y)
{
if ((y - x) % n == 0) cnt += (y - x) / n;
else cnt = -1;
}
return cnt;
}
public int Multiple2And3(int x, int y, int n)
{
int cnt = 0;
int num = x;
List<int> list = new List<int>();
while (x * 2 <= y)
{
if (x == y) break;
x *= 2;
cnt++;
}
if (x != y)
{
if ((y - x) % n == 0) cnt += (y - x) / n;
else cnt = -1;
}
list.Add(cnt);
cnt = 0;
x = num;
while (x * 3 <= y)
{
if (x == y) break;
x *= 3;
cnt++;
}
if (x != y)
{
if ((y - x) % n == 0) cnt += (y - x) / n;
else cnt = -1;
}
list.Add(cnt);
cnt = 0;
x = num;
while (x * 2 <= y || x * 3 <= y)
{
if (x == y) break;
x *= 2;
cnt++;
if (x * 3 <= y)
{
x *= 3;
cnt++;
}
}
if (x != y)
{
if ((y - x) % n == 0) cnt += (y - x) / n;
else cnt = -1;
}
list.Add(cnt);
cnt = 0;
x = num;
while (x * 2 <= y || x * 3 <= y)
{
if (x == y) break;
x *= 3;
cnt++;
if (x * 2 <= y)
{
x *= 2;
cnt++;
}
}
if (x != y)
{
if ((y - x) % n == 0) cnt += (y - x) / n;
else cnt = -1;
}
list.Add(cnt);
list.RemoveAll(number => number == -1);
list.Sort();
if (list.Count == 0) return -1;
return cnt = list[0];
}
//예제 코드는 통과했지만 전체적으로 미완성입니다. 예외처리 또는 코드를 갈아엎고 다시 업로드하겠습니다.
//힌트 댓글은 언제나 환영입니다ㅎㅎ
'C# > 프로그래머스 코딩 문제 풀이' 카테고리의 다른 글
[프로그래머스 C#] Lv.2 점 찍기 (0) | 2024.03.10 |
---|---|
[프로그래머스 C#] Lv.2 H-Index (0) | 2024.03.08 |
[프로그래머스 C#] Lv.2 주식가격 (0) | 2024.03.06 |
[프로그래머스 C#] Lv.2 영어 끝말잇기 (0) | 2024.03.05 |
[프로그래머스 C#] Lv.2 다리를 지나는 트럭 (0) | 2024.03.04 |