반응형
문제출처 : https://www.acmicpc.net/problem/1459
1459번: 걷기
세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 (
www.acmicpc.net
문제풀이)
다음의 경우를 각각 체크해야 된다.
2 * w > s 인 경우에는 모두 축이동만 하는 경우이다.
2 * w < 2 * s 인 경우에는 축이동 두번 하는 것 보다 대각선 두번 이동 하는 경우가 더 좋은 경우이다.
이때 x + y 가 홀수 일때는 반드시 축이동을 한번 해 주어야 한다.
이때는 두 축 중에서 큰 것을 대각선의 갯수로 세어 준후 홀수 라면 대각선의 갯수에서 하나를 빼 준후 축이동을 해 준다.
2*w < s 인 경우에는 대각선 이동을 x,y 축중 작은 축을 대각선 이동 후 남은 것은 축 이동 한다.
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
long long x,y,w,s;
cin >> x >> y >> w >> s;
long long res = (x + y) * w; ///축으로만 이동하는 경우
long long maxdiagonal = max(x,y); /// 대각선 2번 이동이 축이동 2번보다 더 좋은 대각선의 갯수
long long mod = (x+y)%2; /// 대각선의 갯수를 사용하고 남은 수
res = min(res,(maxdiagonal - mod) * s + mod * w); ///축이동 두번 보다 대각선 이동 2번이 더 작을때.
long long mindiagonal = min(x,y);/// 대각선의 갯수중 작은것
long long remainderx = x - mindiagonal; ///사용하고 남은 x 갯수
long long remaindery = y - mindiagonal; ///사용하고 남은 y 갯수
res = min(res,mindiagonal * s + (remainderx + remaindery) * w); ///대각선으로 이동후 남은것을 축 이동 하는 경우
cout << res;
return 0;
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준1546-평균(브론즈1) (0) | 2020.09.16 |
---|---|
백준1526-가장 큰 금민수(브론즈1) (0) | 2020.09.15 |
백준1455-뒤집기II(브론즈1) (0) | 2020.09.13 |
백준1453-피시방알바(브론즈1) (0) | 2020.09.12 |
백준1418번-K세준수(브론즈1) (2) | 2020.09.11 |