코딩테스트/백준

[1459] 걷기(C#)

봉두두 2022. 5. 18. 01:26
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