728x90
세준이가 집에 가기까지 걸리는 최소시간을 구하는 문제.
처음에는 복잡하게 생각했다. 경우의 수를 나누어 하나의 값만 도출되게 했는데,
가지수를 크게 나누어 min값을 출력하면 된다.
나는 대각선으로 최대한 이동할 수 있는 만큼 이동 후 수평이동 조건을 생각하지 못해서
예제입력 6번이 제대로 재현이 안 되는 난관을 겪었다...🥺 난.. 언제쯤..
알고리즘 : 많은 조건 분기
난이도 : 실버 Ⅴ
정답 비율 : 26.248%
string[] inputs = Console.ReadLine().Split(' ');
long X = long.Parse(inputs[0]);
long Y = long.Parse(inputs[1]);
int costofline = int.Parse(inputs[2]);
int costofslash = int.Parse(inputs[3]);
long result1 = 0;
long result2 = 0;
long result3 = 0;
// 1. 평행으로만 이동하는 경우
result1 = (X + Y) * costofline;
// 2. 대각선으로만 이동하는 경우
// 짝수의 경우에 X와 Y중 큰 수 만큼 대각선으로 이동
// 홀수의 경우 1을 빼준만큼 더 대각선으로 이동 후 수평이동
if ((X + Y) % 2 != 0)
result2 = (Math.Max(X, Y) - 1) * costofslash + costofline;
else
result2 = Math.Max(X, Y) * costofslash;
// 3. 대각선으로 최대한 이동 후 수평이동하는 경우 -- 내가 놓친 부분.
// 그런데 상기만으로는 최소값이 아닐 경우도 있다.
// 예제입력 6번의 경우, 아래의 식이 최소시간이 된다.
// 예제입력 6번 : 10000000 50000000 800 901 => 41010000000
result3 = (Math.Min(X, Y) * costofslash) + (Math.Abs(X - Y) * costofline);
Console.WriteLine(Math.Min(result1, Math.Min(result2, result3)));
728x90
728x90
'코딩테스트 > 백준' 카테고리의 다른 글
[1676] 팩토리얼 0의 개수(C#) (0) | 2022.05.30 |
---|---|
[1541] 잃어버린 괄호(C#) (0) | 2022.05.20 |
[1333] 부재중 전화(C#) (0) | 2022.05.06 |
[2748] 피보나치 수 2(C#) (0) | 2022.04.07 |
[10989] 수 정렬하기3(C#) (0) | 2022.03.30 |