문제(출처: https://www.acmicpc.net/problem/2828)
< 사과 담기 게 >
문제 풀이
사과의 위치에 따라 왼쪽으로 이동할지 오른쪽으로 이동할지 바구니가 이동해야 하는 거리가 최소인 값을 찾아 이동한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _2828_ { // 사과 담기 게임
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		int start = 1;
		int end = start + m - 1;
		int j = Integer.parseInt(bf.readLine());
		int result = 0;
		for (int i = 0; i < j; i++) {
			int k = Integer.parseInt(bf.readLine());
			if (start <= k && end >= k) {
				continue;
			} else {
				if (Math.abs(k - start) > Math.abs(k - end)) {
					result += Math.abs(k - end);
					start += Math.abs(k - end);
					end += Math.abs(k - end);
				} else if(Math.abs(k - start) < Math.abs(k - end)) {
					result += Math.abs(k - start);
					end -= Math.abs(k - start);
					start -= Math.abs(k - start);
				}else {
					if(k < start) {
						result += Math.abs(k - start);
						end -= Math.abs(k - start);
						start -= Math.abs(k - start);
					}else {
						result += Math.abs(k - end);
						start += Math.abs(k - end);
						end += Math.abs(k - end);
					}
				}
			}
		}
		System.out.println(result);
	}
}
Main
변수)
n : 스크린 칸
m : 바구니 수
start , end : 바구니의 왼쪽 오른쪽 인덱스
j : 사과의 개수
result : 바구니가 이동해야 하는 거리의 최솟값
k : 사과가 떨어지는 위치
- 스크린 수(n), 바구니 수(m) 입력
- 사과의 개수(j) 입력
- 사과의 수만큼 사과가 떨어지는 위치(k) 입력
: 바구니의 위치가 사과가 떨어지는 위치라면 PASS
: 오른쪽으로 이동하는 것이 최소 이동 값이라면 오른쪽으로 이동
: 왼쪽으로 이동하는 것이 최소 이동 값이라면 왼쪽으로 이동
: 오른쪽으로 이동하는 것과 왼쪽으로 이동하는 값이 같으면 바구니의 수가 하나라는 뜻이므로 왼쪽, 오른쪽으로 이동할지 판단해서 이동
- 바구니가 이동해야 하는 거리의 최솟값(result) 출력

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
| [Baekjoon] 11497_통나무 건너뛰기 (0) | 2023.09.20 | 
|---|---|
| [Baekjoon] 1969_DNA (1) | 2023.09.19 | 
| [Baekjoon] 1213_팰린드롬 만들기 (0) | 2023.09.15 | 
| [Baekjoon] 1449_수리공 항승 (0) | 2023.09.14 | 
| [Baekjoon] 1439_뒤집기 (0) | 2023.09.13 |