(백준) C++ 1459 걷기
문제 및 풀이
https://www.acmicpc.net/problem/1459
그리디
ㅋㅋ 경우의수 정말 싫다 (대충 피그렛 우는짤)
크게 두가지로 나눌 수 있다
- 일자 거리(W)가 더 적은 경우 : 그냥
(X+Y)*W
가 답 - 대각선(S)이 더 적은 경우 :
min(X,Y)*S
만큼 가고 abs(X-Y)만큼 이동해야 한다.- abs(X-Y)가 짝수인 경우 : 똑같이 대각선으로 이동할 수 있으므로
abs(X-Y)*S
만큼 이동 - abs(X-Y)가 홀수인 경우 : 아래 두 경우중 최소로 이동
- 일자 거리
abs(X-Y)*w
만큼 이동 - 짝수
abs(X-Y-1)*S
만큼 이동 후 w만큼 이동
- 일자 거리
- abs(X-Y)가 짝수인 경우 : 똑같이 대각선으로 이동할 수 있으므로
코드
#include <iostream>
using namespace std;
int main(){
long long X,Y,W,S;
cin>>X>>Y>>W>>S;
long long case_A = (X+Y)*W;
long long case_B = min(X,Y)*S;
case_B += min(abs(X-Y)*W, (abs(X-Y)%2==1 ? (abs(X-Y)-1)*S + W : abs(X-Y)*S));
cout<<min(case_A, case_B);
}
Author And Source
이 문제에 관하여((백준) C++ 1459 걷기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minayeah/백준-C-1459-걷기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)