백준 사과 담기 게임

KIMYEONGJUN·2025년 3월 24일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 N과 M이 주어진다. (1 ≤ M < N ≤ 10)
둘째 줄에 떨어지는 사과의 개수 J가 주어진다. (1 ≤ J ≤ 20)
다음 J개 줄에는 사과가 떨어지는 위치가 순서대로 주어진다.

모든 사과를 담기 위해서 바구니가 이동해야 하는 거리의 최솟값을 출력한다.

내가 이 문제를 보고 생각해본 부분

입력 처리: BufferedReader를 사용하여 입력을 받는다.
첫째 줄에서 N과 M을, 둘째 줄에서 사과의 개수 J를 읽고, 그 다음 J개의 사과 위치를 리스트에 저장한다.
바구니 이동 계산: 바구니는 처음에 1번 칸부터 M번 칸을 차지한다.
각 사과의 위치에 따라 바구니를 이동시키고, 이동한 거리만큼 totalDistance에 더해준다.
결과 출력: 모든 사과를 담기 위해 이동한 총 거리를 출력한다.

코드로 구현

package baekjoon.baekjoon_27;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

// 백준 2828번 문제
public class Main970 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // N과 M 입력 받기
        String[] nm = br.readLine().split(" ");
        int N = Integer.parseInt(nm[0]);
        int M = Integer.parseInt(nm[1]);

        // 사과의 개수 입력 받기
        int J = Integer.parseInt(br.readLine());
        ArrayList<Integer> apples = new ArrayList<>();

        // 떨어지는 사과의 위치 입력 받기
        for(int i = 0; i < J; i++) {
            apples.add(Integer.parseInt(br.readLine()));
        }

        // 바구니의 초기 위치 설정
        int currentPosition = 1; // 바구니는 처음에 1부터 M까지 차지하고 있음
        int totalDistance = 0;

        for(int apple : apples) {
            // 바구니가 사과를 담을 수 있는 위치로 이동
            // 바구니의 범위는 [currentPosition, currentPosition + M - 1]
            if(apple < currentPosition) {
                // 바구니를 왼쪽으로 이동
                totalDistance += currentPosition - apple;
                currentPosition = apple; // 바구니의 위치 업데이트
            } else if(apple > currentPosition + M - 1) {
                // 바구니를 오른쪽으로 이동
                totalDistance += apple - (currentPosition + M - 1);
                currentPosition = apple - M + 1; // 바구니의 위치 업데이트
            }
            // 사과가 현재 바구니의 범위에 있을 경우 이동할 필요 없음
        }

        // 결과 출력
        sb.append(totalDistance);
        System.out.println(sb);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글