내가 생각했을때 문제에서 원하는부분
첫째 줄에 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.