Algorithm/Problem Solving

[SWEA/D3] 1860. 진기의 최고급 붕어빵 - JAVA 자바

gangintheremark 2024. 3. 1. 13:43
728x90
  • 155ms

간단하게 생각하기 !!

 

이 문제의 핵심은 입력 중 손님들이 오는 시간은 오름차순으로 주어지지 않는다. 따라서 먼저 Arrays.sort() 를 통해 정렬해준다.

 

먼저 오는 손님들 부터 탐색하며 손님이 온 시간일 때,

1. 붕어빵을 몇 개 만들 수 있는지 구하기

2. 앞의 손님들의 수(i) 빼줬을 때 0보다 작으면 제공할 붕어빵이 없다는 것

int dessert = (arr[i] / m) * k;
if (dessert - i <= 0) flag = false;

 

# 소스코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

public class Solution {
    static int n, m, k;
    static int[] arr;

    public static void main(String[] args) throws IOException {
        // System.setIn(new FileInputStream("input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(br.readLine());

        for (int t = 1; t <= T; t++) {
            st = new StringTokenizer(br.readLine());

            n = Integer.parseInt(st.nextToken()); // n명의 손님
            m = Integer.parseInt(st.nextToken()); // m초의 시간마다 k개의 붕어빵 생성
            k = Integer.parseInt(st.nextToken());

            arr = new int[n];
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < n; i++) {
                arr[i] = Integer.parseInt(st.nextToken());
            }

            Arrays.sort(arr);
            boolean flag = true;

            for (int i = 0; i < n && flag; i++) {
                int dessert = (arr[i] / m) * k;
                if (dessert - i <= 0) flag = false;

            }

            sb.append('#').append(t).append(' ').append(flag ? "Possible" : "Impossible").append('\n');
        }
        System.out.println(sb);
    }
}
코드에 대한 피드백은 언제나 환영입니다🧚🏻‍♀️
728x90