반응형
반응형

https://www.acmicpc.net/problem/2828

문제 요약

사과를 담기 위해 바구니가 이동해야 하는 최소 거리 출력하기

 

 

 

참고

설명이 이해 안돼서 그려봤음!

예제 2번을 그림으로 표현하면 다음과 같다.

전체 스크린 5칸, 바구니 가로 길이 2

사과 3개

사과 떨어지는 순서 : 1 -> 5 -> 3

<이동 거리>

1일 때는 가만히 있어도 받을 수 있기 때문에 0

5일 때는 오른쪽으로 3칸 이동해서 받기

3일 때는 왼쪽으로 1칸 이동해서 받기

=> 총 4번 이동

 

 

 

풀이
var a = Console.ReadLine().Split().Select(int.Parse).ToList();
int s = 0, p = 1;
for (int i = int.Parse(Console.ReadLine()); i-- > 0;)
{
int j = int.Parse(Console.ReadLine());
if (p > j) { s += p - j; p = j; }
else if (j > p + a[1] - 1) { s += j - (p + a[1] - 1); p = j - a[1] + 1; }
}
Console.Write(s);

s는 전체 이동 거리, p는 현재 위치(바구니 길이의 가장 왼쪽 기준)

바구니의 길이는 가장 왼쪽을 p, 가장 오른쪽을 p+a[1]-1로 설정

만약 현재 위치가 1이고 바구니 길이가 2면 p=1, p+a[1]-1=2가 된다.

j는 사과가 떨어지는 위치(예제1 기준 1,5,3)

 

만약 현재 위치가 사과보다 오른쪽에 있으면(p>j) 전체 이동 거리 += 현재 위치 - 사과 위치; 현재 위치 = 사과 위치;

만약 현재 위치가 사과보다 왼쪽에 있으면(j>p+a[1]-1) 전체 이동 거리 += 사과 위치 - 바구니 오른쪽 위치; 현재 위치 = 사과 위치 - 바구니 길이 + 1;

 

만약 바구니 크기 범위(?) 안에 사과가 떨어지면 이동하지 않아도 되므로 그에 대한 조건도 딱히 쓰지 않았음!


난독증 있으면서 설명 엄청 장황하게 써버리기ㅋㅋㅋ 오늘은 일찍 끝냈으니까 산책!

반응형

+ Recent posts