728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에 N과 M이 주어진다. (1 ≤ M < N ≤ 10) 둘째 줄에 떨어지는 사과의 개수 J가 주어진다. (1 ≤ J ≤ 20) 다음 J개 줄에는 사과가 떨어지는 위치가 순서대로 주어진다.
출력
모든 사과를 담기 위해서 바구니가 이동해야 하는 거리의 최소값을 출력한다.
소스코드
#include <iostream> using namespace std; int main(void) { int n, m, j, apple, mov = 0, start, end; cin >> n >> m >> j; start = 1, end = m; for (int i = 0; i < j; i++) { cin >> apple; if (start <= apple && end >= apple) continue; if (start > apple) { mov += start - apple; end -= start - apple; start = apple; } else { mov += apple - end; start += apple - end; end = apple; } } cout << mov; }
Tip
그리디로 접근하여 푸는 문제이며, 매 순간 가장 짧게 이동하는 경로만을 찾아나가면 된다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 10156 - 과자(KOI 지역본선 2014) (0) | 2018.06.20 |
---|---|
백준] 1238 - 파티(USACO 2007) (0) | 2018.06.18 |
백준] 10546 - 배부른 마라토너(COCI 2014/2015) (0) | 2018.06.16 |
백준] 4949 - 균형잡힌 세상(ACM-ICPC Regionals) (0) | 2018.06.15 |
백준] 2512 - 예산(KOI 2012;한국정보올림피아드 2012) (0) | 2018.06.12 |