백준 사과 담기 게임

KIMYEONGJUN·2025년 3월 24일
0
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개의 댓글

관련 채용 정보