728x90
시간 제한 2초, 메모리 제한 128MB
**# 조건
- 세준이는 학교에서 집으로 가려고 한다.
- 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다.
- 세준이는 현재 (0, 0)에 있다. 그리고 (X, Y)에 위치한 집으로 가려고 한다. 세준이가 걸을 수 있는 방법은 두가지 인데, 하나는 도로를 따라서 가로나 세로로 한 블록 움직여서 이번 사거리에서 저 사거리로 움직이는 방법이고, 블록을 대각선으로 가로지르는 방법이 있다.
- 세준이가 집으로 가는데 걸리는 최소시간을 구하는 프로그램을 작성하시오.
# 접근 방법
- 우선 입력으로 주어지는 한 블록 가는 시간과 대각선으로 가로지르는 시간을 비교해준다.
- 2블록 가는 시간이 대각선으로 가로지르는 시간 보다 작다면, (X+Y) * 한 블록 가는데 걸리는 시간을 해준다.
- 만약 가로지르는 시간이 작다면, MIN(X, Y) * 가로지르는 시간을 이동한 후 abs(x-y)만큼 가야되는데 여기서 조건 분기를 해주어야 한다.
- 짝수인 경우 그대로 ABS(X-Y) * 가로지르는 시간을 해주면 된다.
- 홀수 인 경우 아래 두 경우 중 최소로 이동하면 된다.
- 일자 거리 abs(x-y) * w
- 짝수 abs(x-y-1) * 가로지르는 시간만큼 이동 후 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);
}
728x90
'ALGORITHM > Greedy' 카테고리의 다른 글
[프로그래머스] 파이썬 - 택배 배달과 수거하기 (0) | 2023.05.22 |
---|---|
[백준 14939번] 파이썬 - 불끄기 (0) | 2023.05.09 |
[백준 19941번] C++ - 햄버거 분배 (0) | 2023.05.01 |
[백준 10775번] 파이썬 - 공항 (0) | 2023.04.18 |
[백준 2012번] 파이썬 - 등수 매기기 (0) | 2023.03.07 |