[Codeforces 617] A. Elephant

해석이 이상할 수 있습니다.
이상한 부분은 말씀해 주시면 수정하겠습니다.

문제:https://codeforces.com/problemset/problem/617/A

시간 제한: 1s
메모리 제한: 256MB

코끼리는 그의 친구에게 방문하기로 결정했다. 코끼리 집은 좌표 선 0포인트 위에 있고 그의 친구 집은 x(x>0)포인트 위에있다. 한걸을마다 코끼리는 1,2,3,4 또는 5 포인트씩 앞으로 움직일 수 있다. 결정해라, 그가 그의 친구집에 가기위해 필요한 걸음 수의 최소값을.

[입력]
첫줄에는 정수 x이 포함된다 (1 ≤ x ≤ 1 000 000) - 친구 집에 좌표

[출력]
최소 걸음을 출력하라 코끼리가 0에서 x 로 가기위해 필요한.

[Note]
첫 예시에서 코끼리는 x포인트에 가기위해 한 걸음에 5만큼 필요하다



두번째 예시에서 코끼리는 x포인트까지 갈 수 있다 만약 그가 3, 5 그리고 4만큼 움직인다면. 그곳에는 다른 최적의 방법이 있다 그러나 코끼리가 x까지 가기위해 3번보다 적은 방법은 없다

[풀이]

탐욕법을 생각해서 코끼리가 한걸음에 가능한 움직임 수 (1~5)로 내림차순으로 정리하여 친구 집과 거리를 줄여나가는 방법을 사용했다.

예를 들어 남은 거리가 5보다 크다면
x를 5로 나눈 몫을 cnt에 더해주고
x를 5로 나눈 나머지로 갱신해준다.

이렇게하면 x를 5로 나눈 몫이 코끼리가 한 걸음에 5만큼 걸어간 횟수,
x를 5로 나눈 나머지가 친구 집과 남은 거리가 된다.

처음에는 조건문을 하나하나 작성했지만 코드가 길어져 반복문으로 소스를 간결하게 줄였다 아래는 바꾸기 전 코드고 아래 주소에는 바뀐 코드가 있다.

	if (x >= 5) {
		cnt += x / 5;
		x = x % 5;
	}
	if (x >= 4) {
		cnt += x / 4;
		x = x % 4;
	}
	if (x >= 3) {
		cnt += x / 3;
		x = x % 3;
	}
	if (x >= 2) {
		cnt += x / 2;
		x = x % 2;
	}
	if (x >= 1) {
		cnt += x / 1;
		x = x % 1;
	}

[코드]
https://github.com/Woobeen906/Codeforces/blob/main/617-A.cpp

좋은 웹페이지 즐겨찾기