(백준) C++ 1459 걷기

4084 단어 백준백준

문제 및 풀이

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만큼 이동

코드

#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);
}

좋은 웹페이지 즐겨찾기