[백준] 2828번: 사과 담기 게임 (Java)

seri·2024년 7월 5일
0

코딩테스트 챌린지

목록 보기
12/62

문제: https://www.acmicpc.net/problem/2828

📌 문제 탐색하기

입력 : 첫째 줄 - 나누어진 스크린 N칸 / M칸을 차지하는 바구니 (1 ≤ M < N ≤ 10)
둘째 줄 - 떨어지는 사과의 개수 J (1 ≤ J ≤ 20)
셋째 줄부터 - 사과가 떨어지는 위치
출력 : 모든 사과를 담기 위해서 바구니가 이동해야 하는 거리의 최솟값 result

가능한 시간복잡도

O(N)

알고리즘 선택

그리디

📌 코드 설계하기

  1. N, M, J를 input으로 받는다.
  2. 시작 위치를 1, 마지막 위치를 M으로 설정한다.
  3. 사과가 떨어지는 위치를 input으로 받는다.
  4. 시작 위치가 사과가 떨어지는 위치보다 크면 왼쪽으로 이동하고, 마지막 위치가 사과가 떨어지는 위치보다 작으면 오른쪽으로 이동한다.
  5. 조건에 따라 result, start, end를 더하거나 빼준다.
  6. result를 출력한다.

📌 시도 회차 수정 사항 (Optional)

💡 시도별 수정 사항은 어떻게 작성하나요?
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.

1회차

2회차

📌 정답 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        int J = sc.nextInt();
        int start = 1;
        int end = M;
        int result = 0;
        
        for (int i = 0; i < J; i++) {
            int apple = sc.nextInt();
            if (start > apple) { //왼쪽으로 이동
                result += start - apple;
                end -= start - apple;
                start = apple;
            } else if (end < apple) { //오른쪽으로 이동
                result += apple - end;
                start += apple - end;
                end = apple;
            }
        }  
        System.out.print(result);
    }
}
profile
꾸준히 정진하며 나아가기

0개의 댓글