🌞Algorithm/🔥Baekjoon

[Baekjoon] 2828_사과 담기 게임

뿌야._. 2023. 9. 18. 20:45

Silver V

문제(출처: 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  (0) 2023.09.19
[Baekjoon] 1213_팰린드롬 만들기  (0) 2023.09.15
[Baekjoon] 1449_수리공 항승  (0) 2023.09.14
[Baekjoon] 1439_뒤집기  (0) 2023.09.13