문제
세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 (X, Y)에 위치한 집으로 가려고 한다. 세준이가 걸을 수 있는 방법은 두가지 인데, 하나는 도로를 따라서 가로나 세로로 한 블록 움직여서 이번 사거리에서 저 사거리로 움직이는 방법이고, 블록을 대각선으로 가로지르는 방법이 있다.
세준이가 집으로 가는데 걸리는 최소시간을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 집의 위치 X Y와 걸어서 한 블록 가는데 걸리는 시간 W와 대각선으로 한 블록을 가로지르는 시간 S가 주어진다. X와 Y는 1,000,000,000보다 작거나 같은 음이 아닌 정수이고, W와 S는 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 세준이가 집에가는데 걸리는 최소시간을 출력한다.
풀이
부르트포스알고리즘 문제로 무식하게 경우의 수를 모두 나열해 풀었다
오버플로우가 발생해서 고생고생 했다.
요 부분 공부가 더 필요한 것 같다. 자료형에 대해 더 알아봐야지이
2022.03.03 - [study] - 항은 2개의 인수를 받아드리는 함수로 계산되지 않습니다
마주친 오류
항은 2개의 인수를 받아드리는 함수로 계산되지 않습니다
C2064 항은 2개의 인수를 받아들이는 함수로 계산되지 않습니다. 평소에는 min 혹은 max를 비교할 때 ans_min과 ans를 두고 둘을 비교하며 변경하는 식으로 계산하는걸 선호하는데 https://www.acmicpc.net/pro
w-world.tistory.com
실버5라며!!!
코드
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long long X, Y, W, S, ans_1 = 0, ans_2 = 0, ans_3 = 0;
cin >> X >> Y >> W >> S;
// 직선으로만
ans_1 = (X + Y) * W;
//if (ans < min_ans) min_ans = ans;
// 대각선으로만
ans_2 = (((max(X,Y))-((X+Y)%2))*S)+(((X+Y)%2)*W);
//if (ans < min_ans) min_ans = ans;
// 대각선 가고 남은거
ans_3 = (min(X,Y) * S) + ((max(X,Y)-min(X,Y)) * W);
//if (ans < min_ans) min_ans = ans;
cout << min(ans_1, min(ans_2, ans_3));
}
실패의 흔적을 고이고이 남긴 코드
'study > 백준' 카테고리의 다른 글
[백준] 11719. 그대로 출력하기 2 : C++ (0) | 2022.03.06 |
---|---|
[백준] 2609. 최대공약수와 최소공배수 : C++ (0) | 2022.03.04 |
[백준] 2579. 계단 오르기 : C++ (0) | 2022.03.02 |
[백준] 10845. 큐 : C++ (0) | 2022.03.01 |
[백준] 10828. 스택 : C++ (0) | 2022.03.01 |